【发布时间】:2013-01-20 09:02:39
【问题描述】:
我最近开始担任网络开发人员。我使用 ASP .NET MVC 4 和 NHibernate。
在我的工作场所,我们严格要求使用视图模型在控制器和视图之间来回传输数据。并且视图模型不应该包含模型的任何对象。 我知道它是控制器和视图之间的一种层。
但我发现即使我们可以直接将模型的对象发送到视图(在大多数情况下),编写视图模型类也是重复和多余的。
例如,如果我想显示订单,我可以在控制器的操作中执行此操作 -
return View(Repository.Get<Order>(id));
但是,相反,我必须编写一个视图模型,用获取的顺序填充它,然后将其传递给视图。
所以,我的问题是,当我们可以按原样使用模型的对象时,编写视图模型的目的是什么?
【问题讨论】:
-
为了保持一致性,最好以抽象的方式完成,而不是由 Controller 执行实际工作。我们经常没有意识到的是,需求如何随时间变化。从技术上讲,Controller 的工作是协调而不是做实际的艰苦工作(尽管您已经有实体框架为您做这件事)。下一个问题是,如果你想改变你的数据库实现,或者只是想测试怎么办。 ViewModel 基本上是一个抽象,它包装了多个方法,因此它可以很容易地被视图使用。即,您的工作模型、UI 绑定等。
-
拥有 ViewModel 的另一个巨大好处是,一旦您编写了控制器,您就不必再碰它了。未来需要完成的所有工作(重新塑造数据、业务规则、附加要求、验证、列表继续)都可以在 ViewModel 中完成。
-
您的视图可能不需要您的订单中找到的所有字段和属性,那么为什么要用不需要的数据/信息浪费带宽呢?
标签: asp.net-mvc