MVVM:瘦ViewModels和Rich Models

Dan*_*ant 10 c# wpf model mvvm

我将继续努力克服MVVM模式,并且在尝试为小型/中型项目创建实用设计时,遇到了许多挑战.其中一个挑战是弄清楚如何在不创建大量重复,难以维护的代码的情况下获得与此模式解耦的好处.

我目前的策略是创建"丰富"的模型类.他们充分意识到它们将被MVVM模式消耗并实现INotifyPropertyChanged,允许观察它们的集合并且仍然认识到它们可能总是被观察.我的ViewModel类往往很薄,只在实际需要转换数据时暴露属性,其大部分代码是RelayCommand处理程序.视图可以直接绑定到ViewModel或Models,具体取决于是否需要进行任何数据转换.我使用AOP(通过Postsharp)来缓解INotifyPropertyChanged的痛苦,这样就可以很容易地以这种方式使我的所有Model类"丰富".

使用这种方法有明显的缺点吗?我可以假设ViewModel和View是如此紧密耦合,如果我需要View的新数据转换,我可以根据需要将其添加到ViewModel中吗?

maj*_*cha 6

我认为您的模型上的INotifyPropertyChanged仅在您期望VM同时操作VM和外部"强制"时才有用.

我个人是POCO模型的支持者.将任何特定于框架的脚手架放入我的模型中会让我担心.当您将一个事件放入模型类时,您必须仔细考虑模型的生命周期,序列化,存储等可能存在的问题.例如,如果从数据源重新创建对象会发生什么,而旧的INotifyPropertyChanged订阅现在无效?

同样更好的ObservableCollection位置在VM中,它可以使用IEnumerable数据源,并仅向视图显示选定或临时过滤的项目.