Kla*_*sen 20
该模型实现了您的业务逻辑.视图模型在视图(某种形式的UI,例如web,winform,CLI)中装饰您的业务逻辑,以便显示它并与之交互.所以,不,我不会说你的模型应该实现,INotifyPropertyChanged
除非它作为你的核心业务逻辑的一部分.
您的一条评论:
对我来说这个模型实现了INotifyPropertyChanged似乎很奇怪,这在我看来是一个与UI相关的类
更改在各种上下文中使用的通知,而不是UI上下文.例如,您可能希望附加一段记录特定更改的诊断代码TextWriter
.如果对象实现了更改通知,则无需修改底层模型对象即可轻松完成此操作.
但即使在仅用于更新UI的应用程序中,这种模式仍然有意义.因为通过事件处理更改通知,所以引发事件的对象与处理它的对象分离.您的模型不知道,也不需要知道哪种UI正在使用它.它只是说,"假设有一个用户界面,我需要告诉它,无论它是什么,这个属性的价值只是改变了."
那为什么会有一个视图模型呢?为什么不直接绑定到模型?实际上,如果它实现了更改通知,您可以直接绑定到模型.在许多简单的WPF应用程序中,不需要单独的视图模型 - 您可以在模型中实现更改通知并将其称为一天.当您需要将UI与基础业务逻辑分离时,您开始关注是否违反了单一责任原则,即需要出现视图模型.
小智 5
在某些情况下,Model必须实现INotifyPropertyChanged.想象一下,您正在为ICQ编写客户端或类似的东西.ViewModel应该怎么知道,有人给你发了一条消息?
Model和ViewModel之间的区别:
ViewModel仅简化模型的输出.如果模型非常简单,则不需要ViewModel.