MVVM真的有用吗?

tom*_*om7 13 wpf mvvm

我已经阅读了关于MVVM的MSDN文章,我并不是真的相信.如果模型已经实现了INotifyPropertyChanged/INotifyCollectionChanged,那么直接针对Model的View绑定有什么问题?似乎额外的ModelView引入了一些没有太多好处的代码.我错过了什么吗?

Ant*_*ien 12

在看到Jason Dolinger的精彩演讲之前,我对MVVM也有点怀疑.我推荐所有在WPF和MVVM中开始观看的同事.

Jason开始使用一个应用程序,一个人可以用"传统"方式编写,按钮点击由代码隐藏中的事件处理程序处理,然后更新UI的其他部分.使用WPF数据绑定,命令和Unity,他以一种更易于管理,封装,可读和可测试的MV-VM设计逐个转换它.太棒了.

要更直接地回答你的问题,即使你的模型已经包含所有内容而绑定到ViewModel似乎很愚蠢,你也常常需要对模型进行一点调整,而这只需要View.随着时间的推移,这些微小的变化将蔓延到您不属于您的模型中.它会让你的模型比它们应该更复杂.

当我有一个"拥有一切"的模型时,我经常做的是添加一个包含一个属性Model的ViewModel.然后在我的绑定中,我只是绑定到Model.Name,Model.Age等.这真的没有功夫.稍后,如果我只需要为View调整,我已经准备好了ViewModel类.这也使您的代码更直观,更易于理解.你不会想知道,在这种情况下我绑定了Model还是ViewModel?它始终是ViewModel.


Tho*_*que 6

INotifyPropertyChanged并且INotifyCollectionChanged不被考虑的唯一方面......在许多情况下,通过模型公开的数据也不会被认为易于使用.ViewModel的作用是充当模型和视图之间的适配器:以允许视图轻松绑定到它的形式公开数据,公开视图可以绑定的命令以执行操作...通常情况下,模型不会公开ICommands:如果是,那么模型是特定于WPF的,如果你想在其他非WPF应用程序中重用,这绝不是一件好事......

我已经使用MVVM几个月了,它让我的生活变得更加轻松:在代码隐藏文件中没有更多"意大利面条代码",责任明确分离,整体架构清晰......


dec*_*jau 6

我一直在使用MVVM进行2个项目,这里有一些我在ViewModel中做过的事情:

  • 转换模型中的数据(当您使用ViewModel时,它会在UI规范更改时使生活更轻松,您无需更改模型/持久性代码)
  • 在模型提供的集合上实现ICollectionView
  • 实现命令
  • 缓存(维护计算数据的成本很高)
  • 维护模型数据的字典(用于快速查找)
  • 延迟加载(在视图使用之前不加载)
  • 管理撤消/重做
  • 验证数据(IDataErrorInfo)

还有更多的事情要做(我忘了),这不适合模型本身,或者会使用户界面意大利面.

不要忘记,ViewModel使您能够对在UI中实现的无法测试的内容进行单元测试(例如命令).

最后,使用MVVM,我能够使用ViewModel轻松构建应用程序的命令行版本.