模型和视图模型之间的差异

时间:2012-06-26 17:08:25

标签: asp.net-mvc asp.net-mvc-3 model viewmodel

我一直在为一个新项目研究asp.net MVC项目结构,并且对某些事情有疑问让我感到困惑。模型和视图模型之间有什么区别?我是否正确地说视图模型包含表单属性中的模型?

4 个答案:

答案 0 :(得分:29)

我是一个博客,我想在其中显示最新帖子最新评论发布类别的列表单一视图。我怎么能这样做?我可以强烈地输入我对任何一个模型的看法吧?有视图模型

我创建了一个名为BlogViewModel的视图模型,其中包含最新的帖子,最新的评论和其他内容作为属性,我将我的视图绑定到此模型。 postscomments ..是域模型,而BlogViewModel是我专门为视图创建的视图模型

明天我会在移动版本中显示我的博客,那时我可能会创建一个只包含较少属性的简单视图模型。最后..视图模型用于视图,并且大多数时候它们充当真实域模型的包装器!

答案 1 :(得分:22)

模型通常与数据的存储方式(数据库,服务等)密切相关,模型与数据非常相似。

另一方面,ViewModel与您的数据呈现给用户的方式密切相关。它通常是模型的扁平版本,非规范化等。它可以是多个模型的聚合。

对于典型的Person对象,您的模型可能包含以下属性:

  • 名字
  • 出生日期

但是,在您的ViewModel中,您可以选择以不同的方式表示它,并使用更多类似的内容:

  • 全名
  • 年龄

答案 2 :(得分:4)

ViewModel是调整为特定视图的业务域图层的模型版本。

它只有与视图相关的属性,不应该有方法(除了ToString()这样的简单方法。)

ViewModel只是一个“数据容器”。

答案 3 :(得分:2)

模型只是应用程序中对象的表示。但是,您应该注意几种不同类型的模型。

  1. 域模型:这表示应用程序中的域对象,如果您使用的是ORM(Linq2SQL,EF),则表示SQL表。

  2. 视图模型:这表示您希望最终用户查看/编辑/等的对象。视图模型可以包含来自多个或不存在域模型的属性,并且通常排除最终用户不应该使用的属性。视图模型应仅包含向最终用户显示特定请求的相应数据所需的元素。

  3. 关于View Models及其使用的

    Here is some Jimmy Bogard