【问题标题】:What do you do about ModelView files growing massive in a MVVM application?您如何处理在 MVVM 应用程序中不断增长的 ModelView 文件?
【发布时间】:2010-02-15 05:53:33
【问题描述】:

我正在编写一个 MVVM 应用程序,其中一个屏幕的尺寸非常大。屏幕维护一个对象,该对象具有多个其他对象列表,这些对象也可以在事务的上下文中进行编辑。

我已将视图分解为多个用户控件。该模型被分解为不同的类类型。问题是视图模型。因为它聚合了来自多种对象类型的信息并传递了如此多的属性,所以到最后可能有几千行代码。这段代码都不复杂,就是感觉不对。

这是模式不可避免的后果吗?

在这种情况下,我应该查看多个 ViewModel 吗?可能,每个模型类一个。

人们如何处理现实世界中的重要示例(与另一个演示相反)?

谢谢

顺便说一句:WPF/Prism/C#/MVVM 环境

【问题讨论】:

  • 几千行简单的代码不成问题。几百行没有人能维护的复杂代码——这是个问题。

标签: wpf mvvm prism


【解决方案1】:

我尝试为每个视图维护一个 ViewModel。当涉及到 ViewModel 之间的通信时,这对我来说似乎很有效……有很多方法可以处理这个问题。通常我使用 Josh Smith 的 MVVM Foundation 的 Messenger 类。

但归根结底,确实没有任何理由让任何人 ViewModel 变得大得离谱。总有一些方法可以构建一个项目,这样没有一个部分会完全失控。

HTH

【讨论】:

    【解决方案2】:

    一个臃肿的ViewModel往往是一个臃肿的View的标志,也许它可以分成子视图?

    就我个人而言,我经常发现 ViewModel 中的许多代码通常是样板代码,以让视图知道某些属性已被更新 (INotifyPropertyChanged)。看看 Ayende 解决这种腹胀的方法:

    http://ayende.com/Blog/archive/2009/08/08/an-easier-way-to-manage-inotifypropertychanged.aspx

    【讨论】:

      【解决方案3】:

      为什么您的 ViewModel 文件会膨胀?

      与任何其他类一样,您应该能够将代码提取给较小的协作者,然后使用委托。虚拟机之间的通信可以通过命令/事件/方法调用。 VM 应将另一个视图或更高级别的 VM 视为同一事物(另一个客户端)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-22
        • 2010-09-14
        • 1970-01-01
        • 2021-06-24
        • 1970-01-01
        • 2012-01-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多