对MVC和实体模型的困惑

时间:2010-11-14 14:17:53

标签: asp.net-mvc-2 entity-framework-4

我的困惑源于我在构建mvc应用程序时使用了两个不同的演练,即:Steven Sanderson的专业asp.net mvc和在线mvc音乐商店。前者创建域模型,将实体模型与存储库一起放在那里,而音乐商店演示将实体模型放在mvc模型文件夹中。其中哪一种是最好的方法。实体模型和关联的存储库是否应存在于单独的域层或MVC模型文件夹中。

2 个答案:

答案 0 :(得分:3)

关注点分离

Asp.net MVC项目模板中的模型文件夹确实非常混乱。大多数对MVC模式不够了解的开发人员认为应用程序/域模型=数据模型。大多数情况下,情况并非如此。

例如,可以采用多种不同形式的用户实体:

  • NewUser是一个应用程序模型实体,它具有用户的大多数属性,以及两个可以声明性验证的密码属性
  • User 数据模型实体具有所有常用用户属性和一个密码属性
  • User 应用程序模型实体具有所有常用属性,用于密码

所以你可以通过这个简单的例子看到,有多个模型彼此不同。当你有一个多组装的应用程序时,将应用程序模型放在一个单独的程序集中是非常明智的,因为所有程序集很可能只使用这些对象进行通信。不应将数据模型实体转移到数据汇编/层之外以使用SoC ...

因此,最终可以在构建小型简单应用程序时将数据模型放在Model文件夹中,但在所有其他情况下,最好使用在所有程序集之间共享的单独应用程序模型程序集。并且有一个单独的数据模型,仅用于数据层组装。

阅读this answer,可以帮助您更清楚地看待事情 还有this one

我建议不要使用Model文件夹,而是使用单独的程序集。您可以更好地分离并提高可扩展性。

答案 1 :(得分:0)

Strategically将EF模型放在与存储库相同的文件夹中是有意义的,因为它只是 是应用程序内Data-Access-Layer的一部分。

Logically最好将EF模型放在Model目录中,因为它会创建反映应用程序中数据库所需的所有类。 (如果您打开Class View,让所有这些类位于名为Model的文件夹而不是Repositories

中会更好看

在我们公司,我们遇到了同样的问题,并决定将模型保存在Model文件夹中。

毕竟这取决于你做什么。这里最重要的事情是记录在开发过程中发生的各种决策(何时,为什么以及基于什么)。

Documenting everything could prevent later WTF's