对MVC和实体模型的困惑

问题描述 投票:0回答:2

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

asp.net-mvc-2 entity-framework-4
2个回答
3
投票

关注点分离

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

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

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

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

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

阅读this answer,可以帮助您更清楚地看到事情。 和this one一样。

我建议不要使用Model文件夹,而是使用单独的程序集。您将获得更好的分离和改进的可扩展性。


0
投票

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

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

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

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

Documenting everything could prevent later WTF's

© www.soinside.com 2019 - 2024. All rights reserved.