我目前正在使用EF4和asp.net mvc 3,并且当你将这些技术结合在一起时,我肯定会遇到一些麻烦,可以通过不同类型的模型进行工作。EF4模型和MVC模型和视图模型...建模或不模型?
我有一个数据库,我已经定义,并通过EF4我有我的数据库的模型。但也有传递给我的观点的模型和视图模型呢?
可以说我有一个项目的mvc模型。该项目具有描述,名称和类别属性。我有一个视图页面来创建一个项目并将其返回给控制器,通过ef4插入到数据库中。所以我最初创建了一个具有这些确切属性的类作为我的模型。然而,我的页面在创建该项目时还需要一个类别列表,因此我添加了一个字符串数组到我的模型中,该数组作为我的项目模型的一部分与其他属性一起传递到页面,并且工作正常。一切都很好......但我不得不想...因为如果项目模型模拟一个项目,那么它不应该有一个完整的类别列表。它应该只有属于该项目的一部分。
但这个完整的分类列表在哪里去。在视图包里?这对我来说似乎不正确?我应该创建视图模型吗?这个视图模型看起来如何?如何添加一个方法到项目模型,这将沿着GetCategories()的方向,然后我可以从视图页面调用这个方法......但是这是否打破了mvc中理想的关注点分离?
我相信很多人对这个主题会有不同的看法,但是任何能够帮助我解决这个问题的评论都会有所帮助。
感谢,
谢谢史蒂夫,这当然有很大的意义...你会让类别列表视图模型的功能,并从视图运行?或者将在控制器中执行该操作? –
我会有一个'SelectList Categories {get;组; }'ProjectViewModel'上的属性,并将其填充到Controller中。控制器会有一个[Repository](http://martinfowler.com/eaaCatalog/repository.html)对象(或[ServiceLayer](http://martinfowler.com/eaaCatalog/serviceLayer.html)对象,具体取决于大小通过它的构造函数注入到它中,并从中获取可用类的集合。 –