13

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

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

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

解决方案 :

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

4

4 回答 4

23

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

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

于 2011-03-24T10:01:29.423 回答
4

通常我在 Models 文件夹中有我的视图模型,在 ORM 层中有我的域模型。

View Models(从名字上看)是那些你只需要帮助查看过程的对象的普通模型,它们没有任何持久性,它们可能包含一些逻辑。

如果您面临域模型与视图模型匹配的问题,那么您可能需要重新设计模型,或者只使用没有中间人的域模型。

于 2011-03-24T10:06:52.897 回答
1

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

于 2011-03-24T10:08:35.937 回答
1

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

于 2011-06-07T11:20:30.943 回答