【问题标题】:Confusion over MVC and entity model对 MVC 和实体模型的困惑
【发布时间】:2019-03-07 11:41:13
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    关注点分离

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

    以一个可能有多种不同形式的用户实体为例:

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

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

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

    阅读this answer,这可能会帮助您更清楚地了解事情。
    还有this one

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

    【讨论】:

    • Brill,这正是我想要的。谢谢。斯图
    • 同意。保留“Models”文件夹纯粹用于“ViewModels”。
    【解决方案2】:

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

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

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

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

    Documenting everything could prevent later WTF's

    【讨论】:

    • 那么,您会创建一个包含 DAL 的单独项目,还是将整个 DAL 放在模型文件夹中?
    猜你喜欢
    • 2012-03-14
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多