【问题标题】:MVVM - Using simple model as it's own view model is a bad practice?MVVM - 使用简单模型作为它自己的视图模型是一种不好的做法?
【发布时间】:2009-12-04 05:57:25
【问题描述】:

猜我们有简单的模型,例如让它成为一个 Person { Name, Age }。

现在我们要显示人员列表。

  • 人员是只读的
  • 我们不需要编辑它们
  • 我们不需要任何额外的东西,如演示属性等。

现在的问题是,不创建可能是模型类的副本或委托其所有属性的 PersonViewModel 类是否是一种好习惯?将列表框简单地绑定到人员列表而不是他们的视图模型是一个好主意吗?它看起来很干,但是 MVVM 的想法呢?

【问题讨论】:

    标签: mvvm dry


    【解决方案1】:

    绕过虚拟机并直接在视图中使用 M 没有问题。有时模型太小而且是静态的,以至于将它们加载到包装 VM 中是一种浪费。

    【讨论】:

      【解决方案2】:

      我创建了独立的 ViewModel,但通常不是独立的模型。原因是 DataBinding——大多数 POCO 没有实现 INotifyPropertyChanged 接口,并且添加它们以使其成为伪模型似乎违背了重用简单类和尊重 MVVM 模式的目的。

      现在,如果您知道自己永远不会编辑它们,那可能不是一个坏主意。具有简单属性重定向的 VM 对我来说似乎毫无意义。

      【讨论】:

      • 对不起,我没有写模型是只读的,所以我们不需要 INotifyPropertyChanged 实现。 [编辑问题]
      【解决方案3】:

      就我而言,如果你实现了 INotifyPropertyChanged,那么它就变成了一个 ViewModel,你可以绑定到它。 :) 当我写SoapBox Core 这都是 MVVM 时,我采取了一切都是 ViewModel 的方法。唯一的 Model 对象是来自第三方库的类,我引入并封装在自己的 ViewModel 中。

      【讨论】:

      • 但是,谈到 OP 的问题,为什么你会这样做?对于仅显示为只读的非常简单的 Model 对象,您为什么要采取额外的步骤来为它们创建 ViewModel?我不认为这是坏事或好事,只是 OP 试图找出为什么有人会这样做或为什么不这样做是不好的。
      • @Anderson Imes:在不可变对象(只读)的特定情况下,您没有理由实现 INotifyPropertyChanged,因此绑定到它就可以了。或者,如果您不希望它改变,我看不出有理由不绑定它。
      • 最初听起来您好像使用了“所有”视图模型...这将是对所有模型对象作为视图模型的彻底改造,但您的澄清似乎表明您是逐案处理的基础。这更清楚了,谢谢。
      【解决方案4】:

      当 ViewModel 不引入新的必需功能时,我不会为 Person 业务对象创建 ViewModel。

      您可能对 MVVM 社区中的第二种方法感兴趣:为每个视图而不是每个业务对象创建一个 ViewModel。

      可以在WPF Application Framework (WAF) 网站上找到遵循此方法的示例应用程序。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-09
        • 2010-10-25
        • 2013-02-03
        • 2013-03-16
        • 2011-02-08
        • 2010-10-25
        • 2015-10-01
        • 2012-04-01
        相关资源
        最近更新 更多