应该使用MVC在每个View中使用ViewModel吗?

时间:2011-09-09 15:36:09

标签: c# asp.net-mvc model-view-controller asp.net-mvc-3 viewmodel

据我所知,您使用ViewModel来存储要在View中使用的其他模型和源的不同数据,因为模型并不总能保存您想要的内容。

我正在试图弄清楚每个View都使用ViewModel是否合适。我问的原因是出于一致性原因。您可以拥有一个只需要Model本身的View和另一个必须拥有ViewModel的View。在你的所有观点之间混合这些是不是很好?或者每个View都应该有一个ViewModel?

这很重要,因为我的模型与数据库直接相关,因为我正在使用Entity Framework 4.1 Code First。

2 个答案:

答案 0 :(得分:13)

这不是一项要求,但这是一种最佳做法。

您希望尽可能地将数据库与演示文稿分离,并且ViewModel(即使它是相同的)会为您提供分离。它也保持一致,所以你没有模型的一些视图,有些没有。这种类型的设计使您可以考虑您希望您的观看到的所有数据,并找出优化,看看是否可能发生重复数据,将数据保持在一个位置等等。

ViewModel视为与View签订的合同.... View要求X工作。

前面的工作要多一些,但最终会得到回报。

答案 1 :(得分:7)

就我个人而言,我喜欢将从我的模型发送到我的观点的内容抽象出来。

原因是需求发生变化并且使用视图模型我可以快速包含我需要的数据而不会污染我的模型。

当您的模型由框架创建时,它会更加发挥作用。如果您的框架相关模型发生变化,那么抽象出模型的细节可能会在未来真正发挥作用。

还值得记住,您的视图与您的控制器和模型无关。您可能会发现,通过使用视图模型,您可以比将视图绑定到模型本身时更轻松地在控制器方法中重复使用视图。