MVC范例中的模型,域,存储库和服务有什么区别?

时间:2010-10-06 09:07:22

标签: asp.net-mvc model-view-controller asp.net-mvc-2

模型,域和存储库是否基本相同?

2 个答案:

答案 0 :(得分:5)

没有

区分域模型与其包含的存储库的第一种方法是考虑存储库的作用。

本质上,存储库只是封装了一大块数据访问代码,以这种方式暴露给定的接口,以便程序员可以轻松地交换不同的存储方法,例如,独立于数据库问题测试其他代码。

相比之下,域模型包含给定应用程序的所有必需存储库。因此,很明显它是一个非常不同的野兽。

更大的野兽。

域模型还将包括其他代码和类,例如通过控制器传递给Views的模型(在MVC范例中)。

一派思想坚持认为域模型应该在自己的类库中。这种思想反对在默认的MVC项目中使用Model文件夹。我同意这一点,通常会删除它。

域模型为域建模。它与传递给每个视图的模型不同,它实际上只代表视图所需的数据,而不是对给定的业务问题进行建模,包含存储库和服务等。

我认为你的问题是一个很好的问题,因为它解决了一个很容易让人感到困惑的问题,如果你不了解他们背后的想法。

首先是鸡还是鸡蛋?答:都没有。首先是问题。

DDD

这些概念是领域驱动设计的一部分,它与特定的技术实现无关,而是关于如何标准化需要转换为软件的复杂域的理解和建模的一套指南。

MVC的一大优点是它允许你使用像Domain Driven Design这样的东西。相比之下,在ASP.NET webforms中,在尝试应用良好的设计原则时,您会受到更多限制。

即,MVC允许您设计应用程序,以便将域的表示封装在MVC的M位中。

在一天结束时,您可以选择M位多远。它可以只在Models文件夹中,或者你可以将它重构到它自己的类库中,并根据你的内容重构它,实现DDD最佳实践或你想要的任何其他。

答案 1 :(得分:1)

他们不是。这些都是Domain Driven Design方法的所有要素。第一个介绍是this free e-book

HTH!
托马斯