我一直在研究asp.net MVC项目结构的一个新项目,并有一个问题让我感到困惑。模型和视图模型有什么区别?我在说视图模型包含表单属性中的模型时是否正确?模型和视图模型之间的差异
回答
我有一个博客,我想显示在一个视图中的最新的帖子,最新评论,日志分类名单。我该怎么做?我可以强烈地将我的观点输入到任何一个模型中?有查看模型。
我创建了一个名为BlogViewModel
的视图模型,其中包含最新的帖子,最新的评论和其他东西作为属性,我绑定我的视图与这个模型。 posts
,comments
..都是域模型而BlogViewModel
是查看模型我专门为视图创建的。
明天我会在移动版本中显示我的博客,那时我可能会创建一个只包含较少属性的简单视图模型。最后,视图模型是用于视图和大部分时间,它们充当真实域模型的包装器!
ViewModel
是从调整到特定视图的业务域图层中的模型的版本。
它只有与视图相关的属性,不应该有方法(除了简单的像ToString()
)。
ViewModel
只是一个“数据容器”。
模型仅仅是应用程序中对象的表示形式。但是,您应该了解几种不同类型的模型。
域模型:如果您使用的是ORM(Linq2SQL,EF),则表示应用程序中的域对象,如SQL表。
查看模型:这表示您希望最终用户查看/编辑/等的对象。视图模型可以包含来自多个域模型或不包含域模型的属性,并且通常会排除最终用户不应该使用的属性。视图模型应只包含为特定请求显示适当数据给最终用户所需的元素。
Here is some Jimmy Bogard为您查看模型及其使用。
模型通常与数据存储(数据库,服务等)的关系更密切,模型与这些模型非常相似。
另一方面,ViewModel与您的数据呈现给用户的方式密切相关。它通常是您的模型的扁平版本,非规范化等等。它可以是多个模型的聚合。
对于典型的Person
的对象,你的模型可能包含的属性如下所示:
- 姓
- 名字
- 出生日期
然而,在您的视图模型,你可以选择代表它不同,并有更多像:
- 全名
- 年龄
我会补充说一个Model对象应该代表对象的语义/概念结构,它的内在/自然属性和行为,而不是它实际存储的方式。存储受制于实现细节,这不是实际的对象特性。 – heltonbiker
@heltonbiker,这是一个伟大的观点。我认为有许多模型,ViewModel,业务逻辑模型,数据存储模型等等。我们经常挣扎,因为我们不接受每个人的差异,而是关注他们的相似之处。我很快就可以写一篇博客文章;) –
在我看来,模型是最重要的开发活动中最被忽视的部分(至少在我知道的大多数地方......) – heltonbiker
- 1. 视图模型和模型和视图之间的关系
- 2. PHP并发模型和Node.js并发模型之间的差异
- 3. WPF中模型视图和视图模型之间的关系
- 4. 视图模型定义的差异
- 5. 视图和模型之间的关系
- 6. 视图模型和模型之间的MVVM层?
- 7. 两个模型视图的设计和模型之间
- 8. 检测行差异(视图或模型)?
- 9. 模型和外部模型的调用值之间的性能差异
- 10. 'typename`参数化模板和积分类型之间的差异
- 11. MVC - 模型,对象和库之间的差异
- 12. Silverlight - 视图模型之间的通信
- 13. 视图模型之间的Silverlight导航
- 14. MVC模式中的模型和视图之间的链接
- 15. 如何在视图中传递差异类型的模型?
- 16. 模拟器和Eclipse SDK视图布局之间的Android差异
- 17. WPF MVVM:INPC和调解视图模型和模型之间的通信
- 18. 在视图模型之间切换
- 19. Silverlight通信/命令/事件?视图和视图模型之间?
- 20. 在视图和视图模型之间通信非UI数据
- 21. 在视图和视图模型之间跳转
- 22. 模型和视图
- 23. AutoMapper:域模型和视图模型之间的双向深度映射
- 24. 验证模型和视图模型mvc
- 25. 视图模型和或域模型?
- 26. MVVM视图模型和模型问题
- 27. 模型差异中间层xpand
- 28. EF4模型和MVC模型和视图模型...建模或不模型?
- 29. api和模型招摇的差异
- 30. Laravel中的模型和播种差异
你可能已经google了。 SO本身有很多问题注册。这个主题。 – VJAI
This SO Question- http://stackoverflow.com/questions/4061440/asp-net-mvc-model-vs-viewmodel,完美地回答了这个问题。 – Bibhu