ASP.NET MVC模型 vs Entity Framework模型

13

在 asp.net mvc 的 model 文件夹中创建一个模型是否是最佳实践?并使用这些模型与视图进行交互,并通过使用服务层将我的模型“适配”到 EF 模型。

或者您使用其他方法。这种方法的问题在于,大多数情况下(自制)模型是 EF 模型的副本(不符合DRY原则)。

那么有人能解释一下应该使用哪些模型来处理视图,因为这变得非常混乱。模型/视图模型/Entityframework模型....

解决方案:

感谢各位的回答,我现在需要重构一些东西!

4个回答

23

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

我不是纯粹主义者。如果我的ViewModel与实体完全相同,我会直接使用实体,但是一旦需要在视图中添加任何其他信息,我就会重构代码。大多数情况下,我从实体开始,最终以ViewModel结束,因为这是逐步开发的结果。


按照这种模式,你会推荐使用哪种命名约定?MVC教程告诉你简单地使用“models”文件夹,将实体框架模型放入其中,并假设它们与视图模型相同(我们知道,这通常并不是这样)。 - Saturnix

4
通常我会把视图模型(View Models)放在Models文件夹中,将领域模型(Domain Models)放在ORM层中。 视图模型(View Models)(从名称上来看)是用于辅助查看过程的普通模型,它们没有任何持久性,并且可能包含一些逻辑。
如果你遇到领域模型与视图模型匹配的问题,那么你可能需要重新设计模型或者直接使用领域模型而不需要中间人。

1

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


1

对于我来说,我更喜欢删除标准MVC结构中的Models文件夹,并添加ViewModels文件夹,以存储所有视图模型。正如Ladislav所提到的,在最初的迭代中,这些视图模型可能是从域模型中的实体精确复制,但逐步地它们将会增长并且变得非常不同。


为什么将文件夹命名为viewModels而不是models有什么重要意义? - DavidB
没有。但是这样你可以看到“视图”模型对象被保存在那里,而不是“业务”模型对象。这完全取决于个人偏好 :) - Naz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接