【问题标题】:difference between models and view models模型和视图模型之间的区别
【发布时间】:2012-06-28 01:47:56
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

我有一个博客,我想在一个视图中显示 最新帖子最新 cmets帖子类别的列表.我怎么能这样做?我可以强烈地将我的视图输入到任何一个模型,对吗? 视图模型来了。

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

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

【讨论】:

    【解决方案2】:

    模型通常与您的数据的存储方式(数据库、服务等)更密切相关,并且模型将与这些非常相似。

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

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

    • 名字
    • 姓氏
    • 出生日期

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

    • 全名
    • 年龄

    【讨论】:

    • 我要补充一点,模型对象应该代表一个对象的语义/概念结构,它的内在/自然属性和行为,而不是它的实际存储方式。存储取决于实现细节,这不是对象的实际特征。
    • @heltonbiker,这很好。我认为有很多模型,ViewModels、业务逻辑模型、数据存储模型等。我们经常挣扎,因为我们不接受它们中的每一个的差异,而是专注于它们的相似之处。我可能很快就会写一篇关于这个的博客文章;)
    • 在我看来,建模是最重要的开发活动中最被忽视的(嗯,至少在我知道的大多数地方......)
    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

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

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

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

      Here is some Jimmy Bogard 向您介绍 View Model 及其使用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-30
        • 2015-10-01
        • 1970-01-01
        • 2013-01-01
        • 2014-06-09
        • 2012-09-15
        • 1970-01-01
        相关资源
        最近更新 更多