我一直在为一个新项目研究 asp.net MVC 项目结构,并且有一个问题让我感到困惑。模型和视图模型有什么区别?我说视图模型包含表单属性中的模型是否正确?
4 回答
我有一个博客,我想在一个视图中显示最新帖子、最新评论、帖子类别的列表。我怎么能这样做?我可以强烈地将我的视图输入到任何一个模型,对吗?有视图模型。
我创建了一个名为的视图模型BlogViewModel
,其中包含最新帖子、最新评论和其他内容作为属性,并将我的视图与该模型绑定。, .. 是域模型posts
,而是我专门为视图创建的视图模型。comments
BlogViewModel
明天我将在移动版本中展示我的博客,届时我可能会创建一个仅包含较少属性的简单视图模型。最后..视图模型用于视图,并且大多数时候它们充当真实域模型的包装器!
模型通常与数据的存储方式(数据库、服务等)更密切相关,并且模型将与这些非常相似。
另一方面,ViewModel 与您的数据如何呈现给用户密切相关。它通常是您模型的扁平化版本、非规范化等。它可以是多个模型的聚合。
对于您的典型Person
对象,您的模型可能包含如下属性:
- 名
- 姓
- 出生日期
但是,在您的 ViewModel 中,您可以选择以不同的方式表示它,并且更像是:
- 全名
- 年龄
ViewModel
是从业务领域层调整到特定视图的模型版本。
它只有与视图相关的属性,不应该有方法(除了像这样的简单方法ToString()
)。
ViewModel
只是一个“数据容器”。
模型只是应用程序中对象的表示。但是,您应该注意几种不同类型的模型。
域模型:这表示您的应用程序中的域对象,如果您使用的是 ORM(Linq2SQL,EF),则类似于 SQL 表。
查看模型:这表示您希望最终用户查看/编辑/等的对象。视图模型可以包含来自多个域模型或不包含域模型的属性,并且通常会排除最终用户不应该使用的属性。视图模型应该只包含为特定请求向最终用户显示适当数据所需的元素。
这里有一些关于视图模型及其使用的 Jimmy Bogard。