我的模型应该怎么样?

时间:2010-08-31 11:47:32

标签: c# wpf design-patterns mvvm-light

当我进一步深入研究MVVM和MVVM-light时,我认识到,没有MVVM-light为模型提供基类。

但根据我的理解,消息传递和提出通知也可能发生在模型中。至少在模型之间的沟通中,我会发现消息传递非常方便。

所以我决定从ViewModelBase派生我的模型,即使某些属性(如设计时间属性)将不被使用。

但是我越看这个,我就越想错过什么。从ViewModelBase派生我的模型被认为是“不好的做法”吗?

使用Messaging进行模型通信是否可以?

2 个答案:

答案 0 :(得分:9)

从您喜欢的任何内容中派生您的视图模型类...... MVVM-light提供了VieWModelBase来提供ICleanUp的实现 - 这对于管理ViewModel对象的生命周期非常有用。我自己的选择是在基类中实现属性更改通知的所有脚手架,然后从模型类派生。关于模型类的唯一强有力的建议是:

  1. 一旦尺寸不适合所有。您存储数据的方式可能与您与数据交互的方式不同,ViewModel对象应该用于支持交互,而不是存储,如果您需要以两种截然不同的方式与相同的数据(模型)进行交互,那么设计两个不同的ViewModel支持这些不同的交互。
  2. 使用属性(一个System.ComponentModel)来注释模型。您可以通过这种方式完成大量的验证工作 - 验证反馈是表示层(View + ViewModel)的责任,而不是问题域(即模型)。
  3. 非常好的ViewModel类通常也是无状态的,它们可以在单个用户交互中循环/重用,这样可以虚拟化大型数据列表(WPF支持虚拟化)以节省RAM。

    记住DRY(不要重复自己),KISS(保持简单,愚蠢!)和YAGNI(你不需要它) - 你应该记住的原则上面任何学术设计原则。我真的浪费了几周的WPF应用程序来实现学术上完美的MVC / MVVM模式,却发现它们已经从最终解决方案的整体可理解性中消失了。所以...保持简单! :)

答案 1 :(得分:2)

我会看一下Composite Application Library中的EventAggregatorthis帖子中的答案对其有很好的描述。杰里米·米勒的post详细介绍了一下。