【问题标题】:asp.net mvc models vs entity framework modelsasp.net mvc 模型与实体框架模型
【发布时间】:2011-07-22 00:02:34
【问题描述】:

在您的 asp.net mvc - model 文件夹中创建模型是否是最佳实践。 将这些模型与您的视图一起使用,并使用服务层将我的模型“调整”到 EF 模型。

或者您是否使用了其他方法。这种方法的问题在于,大多数时候我的(自制)模型是 EF 模型的副本(不是干的)

所以有人可以解释一下你的视图使用什么模型,因为它变得非常混乱。模型/视图模型/实体框架模型 ....

解决方案:

感谢大家的回答,我现在正在重构一些东西!

【问题讨论】:

    标签: asp.net-mvc entity-framework-4 viewmodel datamodel


    【解决方案1】:

    正确的方法是对 ViewModel 使用不同的类,对持久性(实体)使用不同的类。通常的原因是您经常需要向视图发送一些额外的数据(例如填充下拉列表的数据、禁用某些字段的数据等)、使用不同的验证或仅显示实体的子集。

    我不是纯粹主义者。如果我看到我的视图模型与我直接使用实体的实体完全相同,但是一旦我需要视图中的任何其他信息,我将重构代码。由于增量开发,我通常从实体开始,以视图模型结束。

    【讨论】:

    • 在遵循此模式时,您会推荐哪种命名约定? MVC 教程告诉您只需使用“模型”文件夹,将您的实体框架模型粘贴在其中,并假设它们与您的视图模型相同(我们知道,通常情况并非如此)。
    【解决方案2】:

    通常我的 View Models 在 Models 文件夹中,我的 Domain Models 在 ORM 层中。

    查看模型(顾名思义)是那些您只需要帮助查看过程的对象的普通模型,它们没有任何持久性,它们可能包含一些逻辑.

    如果您遇到领域模型与视图模型匹配的问题,那么您可能需要重新设计模型,或者只使用领域模型而无需中间人。

    【讨论】:

      【解决方案3】:

      就我而言,我更喜欢删除标准 MVC 结构中的 Models 文件夹,并添加 ViewModels 文件夹来存储所有视图模型。正如 Ladislav 在第一次迭代中提到的那样,这些视图模型可能是您的域模型中实体的精确副本,但它们会逐渐增长并且会有很大差异。

      【讨论】:

      • 文件夹viewModels而不是models有什么意义?
      • 无。但是通过这种方式,您会看到“视图”模型对象保存在那里,而不是“业务”模型对象。这一切都取决于个人喜好:)
      • 我明白了,现在说得通了。感谢您的回复。
      【解决方案4】:

      好吧,这没有意义。我曾经为此苦苦挣扎,我认为您需要有不是表实体的模型,我称之为域模型。原因是有时如果您使用的是linq2sql,那么您必须处理桥接/链接表(这不是真正的实体)和复杂的计算,所以您无法在表实体中进行处理,对吧?所以我的方法是让 ViewModel Model Entity

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-03
        • 2014-01-18
        • 1970-01-01
        • 1970-01-01
        • 2012-04-10
        • 2010-11-20
        相关资源
        最近更新 更多