EF4模型和MVC模型以及视图模型......要建模还是不建模?

时间:2011-06-29 09:39:44

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

我目前正在使用EF4和asp.net mvc 3,当你将这些技术结合在一起时,我在使用不同类型的模型时遇到了一些麻烦。

我有一个我已定义的数据库,通过EF4我有一个我的数据库模型。但是还有一个模型被传递给我的视图以及视图模型怎么样?

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

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

我相信很多人会对这个问题有不同的看法,但任何能帮助我解决这个问题的评论都会有所帮助。

谢谢,

1 个答案:

答案 0 :(得分:0)

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

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