我的困惑源于我在构建mvc应用程序时使用了两个不同的演练,即:Steven Sanderson的专业asp.net mvc和在线mvc音乐商店。前者创建域模型,将实体模型与存储库一起放在那里,而音乐商店演示将实体模型放在mvc模型文件夹中。其中哪一种是最好的方法。实体模型和关联的存储库是否应存在于单独的域层或MVC模型文件夹中。
Asp.net MVC项目模板中的模型文件夹确实非常混乱。大多数对MVC模式不够了解的开发人员认为应用程序/域模型=数据模型。大多数情况下,情况并非如此。
例如,可以采用多种不同形式的用户实体:
NewUser
是一个应用程序模型实体,具有用户的大多数属性,以及两个可以声明性验证的密码属性User
数据模型实体具有所有常用用户属性和一个密码属性User
应用程序模型实体具有所有常用属性,无密码因此,您可以通过这个简单的示例看到,有多个模型彼此不同。当你有一个多组装的应用程序时,将应用程序模型放在一个单独的程序集中是非常明智的,因为所有程序集很可能只使用这些对象进行通信。不应将数据模型实体转移到数据汇编/层之外以使用SoC ...
因此,最终可以在构建小型简单应用程序时将数据模型放在Model文件夹中,但在所有其他情况下,最好使用在所有程序集之间共享的单独应用程序模型程序集。并且有一个单独的数据模型,仅用于数据层组装。
阅读this answer,可以帮助您更清楚地看到事情。 和this one一样。
我建议不要使用Model文件夹,而是使用单独的程序集。您将获得更好的分离和改进的可扩展性。
Strategically
将EF模型放在与存储库相同的文件夹中是有意义的,因为它只是应用程序内部的Data-Access-Layer的一部分。
Logically
最好将EF模型放在Model
目录中,因为它创建了反映应用程序中数据库所需的所有类。 (如果你打开Class View
,让所有这些类都驻留在名为Model
而不是Repositories
的文件夹中会更好看)
在我们公司,我们遇到了同样的问题,并决定将模型保存在Model文件夹中。
毕竟,这取决于你做什么。这里最重要的事情是记录开发过程中发生的各种决策(何时,为什么以及基于什么)。