2011-03-24 94 views
12

最好的做法是在您的asp.net mvc模型文件夹中创建一个模型。 将这些模型与您的视图一起使用,并使用服务层将我的模型“修改”为EF模型。asp.net mvc模型vs实体框架模型

或者你使用另一种方法。这种做法的问题是,我的(自制)模型的大部分时间是EF模型的拷贝(不是干的)

所以有人可以解释我用什么模型来处理视图,因为它很容易混淆。模型/视图模型/ Entityframeworkmodel ....

解决方案:

感谢所有的答案猜猜我是此刻重构一些事情!

回答

22

正确的做法是使用用于视图模型不同类和不同的用于持久性(实体)。通常的原因是你经常需要发送一些额外的数据到一个视图(例如数据填充下拉菜单,数据禁用某些字段等),使用不同的验证或只显示实体的子集。

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

+0

下面这个模式,它的命名规则,你会推荐什么时候? MVC教程告诉你只需使用“模型”文件夹,将你的实体框架模型放入其中,并假定它们与你的视图模型相同(正如我们所知,这通常不是这种情况)。 – Saturnix 2017-05-20 17:06:28

3

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

视图模型(从名字)是为那些你只需要帮助的观看过程对象的正常模式,他们没有持久性任何它们可能包含一些逻辑。

如果你面对你的域模型匹配您的视图模型的问题,那么你可能需要重新设计的模型或只是使用领域模型没有一个人在这方面的中间人。

1

至于我,我宁愿删除在标准的MVC结构Models文件夹并添加的ViewModels文件夹中保存我的所有视图模型。正如拉迪斯拉夫在第一次迭代中提到的那样,这些视图模型可能是来自您的域模型的实体的确切副本,但是增量式的增长将会有很大的不同。

+0

确定文件夹viewModels而不是模型的意义是什么? – DavidB 2013-02-07 09:33:06

+0

无。但通过这种方式,您可以看到“视图”模型对象保存在那里,而不是“业务”模型对象。这一切都取决于个人喜好:) – 2013-02-07 12:26:57

+0

我明白了,现在有道理。谢谢回复。 – DavidB 2013-02-07 16:34:54

1

嗯,这没有任何意义。我曾经为此苦苦挣扎,我认为你需要拥有不是表格实体的模型,我称之为领域模型。其原因有时是,如果你使用linq2sql,那么你必须处理桥接/链接表(这不是真正的实体)和复杂的计算,所以你不能在你的表实体中,正确的?所以,我的方法是让视图模型< - >模型< - >实体