【问题标题】:EF4 models and MVC models and view models ... To model or not model?EF4 模型和 MVC 模型和视图模型...建模还是不建模?
【发布时间】:2011-06-29 09:39:43
【问题描述】:

我目前正在使用 EF4 和 asp.net mvc 3,当您将这些技术结合在一起时,我在处理可能出现的不同类型的模型时肯定会遇到一些麻烦。

我有一个我已经定义的数据库,并且通过 EF4 我有一个我的数据库模型。但是也有模型传递给我的视图,那么视图模型呢???

假设我有一个项目的 mvc 模型。该项目具有描述、名称和类别属性。我有一个视图页面,它创建一个项目并将其返回给控制器,以便通过 ef4 插入到数据库中。所以我最初创建了一个具有这些确切属性的类作为我的模型。但是,在创建该项目时,我的页面还需要一个可供选择的类别列表,因此我在模型中添加了一个字符串数组,该数组与其他属性一起作为我的项目模型的一部分传递给页面,并且运行良好。一切都很好......但我开始思考......因为如果项目模型为项目建模,那么它不应该有完整的类别列表。它应该只具有属于该项目的类别。

但是这个完整的类别列表到哪里去了。在视图包中?这对我来说似乎不正确?我应该创建一个视图模型吗?这个视图模型看起来如何?如何在项目模型中添加一个类似于 GetCategories() 的方法,然后我可以从视图页面调用这个方法......但这会破坏 mvc 中理想的关注点分离吗?

我相信很多人对这个主题会有不同的看法,但任何能帮助我度过这个烂摊子的评论都会有所帮助。

谢谢,

【问题讨论】:

    标签: asp.net-mvc entity-framework model


    【解决方案1】:

    在所有最简单的应用程序中,最好不要将模型对象传递给视图。 View 应该有一个 ViewModel,它由 Controller 使用来自 Model 对象的数据构建,其中包含 View 显示其信息所需的所有内容。

    ViewModels 将您的表示层与您的业务层分离,您的示例说明了为什么这很重要;您的视图需要有关 Project 的信息,还需要 Project 可能属于的所有 Categories 的完整列表 - 这样的列表在逻辑上不适合 Project 域模型对象,但在逻辑上完全适合ProjectViewModel.

    【讨论】:

    • 谢谢史蒂夫,这当然很有意义......你会让类别列表成为视图模型的功能并从视图中运行吗?还是会在控制器中执行该操作?
    • 我在ProjectViewModel 上有一个SelectList Categories { get; set; } 属性,并将其填充到控制器中。控制器将通过其构造函数将Repository 对象(或ServiceLayer 对象,取决于系统的大小)注入其中,并从中获取可用类别集。
    猜你喜欢
    • 2010-10-03
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多