我已阅读关于MVVM的MSDN文章,我并不确信。 如果模型已经实现了INotifyPropertyChanged/INotifyCollectionChanged,那么视图与模型直接绑定有什么问题? 看来额外的ModelView引入了一些没有太多好处的代码。 我错过了什么吗?MVVM真的有用吗?
回答
我也有点怀疑MVVM,直到我看到Jason Dolinger的great presentation。我建议所有从WPF和MVVM入手的同事观看它。
杰森开始与 人会在“传统” 方式编写,由 事件处理程序在处理按钮点击一个应用程序的代码隐藏的UI是 然后更新的其他部分。 使用WPF数据绑定,命令和 Unity,他对其进行了改造,使用一个更易于管理的,可封装,可读且可测试的M-V-VM设计。太棒了。
更直接地回答你的问题,即使它看起来傻乎乎地绑定到视图模型时,你的模型已经拥有一切,你会经常拉闸需要一个小的调整是唯一由视图所需要的模型。随着时间的推移,这些小的变化会蔓延到你的模型中,他们不属于它们。它会让你的模型比他们应该的更复杂。
当我有一个“拥有一切”模型时,我经常做的是添加一个包含一个属性Model Model的ViewModel。然后在我的绑定中,我只是绑定到Model.Name,Model.Age等。这真的没有任何努力。后来,如果我只需要调整视图,我已经准备好了ViewModel类。这也使您的代码更直观,更易于理解。在这种情况下,你会不会怀疑,我绑定了Model还是ViewModel?它将始终是ViewModel。
INotifyPropertyChanged
和INotifyCollectionChanged
不是唯一需要考虑的方面......在很多情况下,模型公开的数据不易被视图使用。 ViewModel的作用是充当模型和视图之间的适配器:以允许视图轻松绑定到视图的形式公开数据,展示视图可以绑定的命令以执行操作...通常情况下,一个模型不会暴露ICommand
s:如果是这样,那么该模型是WPF特定的,这是从来没有好东西,你想在其他非WPF应用程序中重用...
我有一直使用MVVM几个月,它使我的生活变得更加简单:在代码隐藏文件中没有更多的“意大利面条代码”,清晰的职责分工,清晰的整体架构......
我已经用了2个项目MVVM这里是我一直在做的视图模型的几件事情:
- 从模型转换数据(当使用一个视图模型,它使生活容易当UI规范改变,你不需要改变模型/持久性代码)
- 实现了由模型
- 实施命令
- 缓存提供集合的ICollectionView(维持昂贵的计算数据)
- 维护模型数据字典(快速查找)
- 延迟加载(不加载,直到它被使用的视图)
- 管理撤消/重做
- 数据的验证(IDataErrorInfo的)
还有更多的事情要做(那个我忘了),它不适合模型本身,或者会使用户界面意大利面。
不要忘记,ViewModel使您能够单元测试您无法测试它是否在UI中实现的事物(如命令)。
最后,使用MVVM,通过使用ViewModels,我能够非常轻松地构建我的应用程序的命令行版本。
我在MEF使用MVVM几年了,我不确定它真的有多大帮助。 在我们的开发中,我们不会将ViewModel用于不同的Views,我们也没有只允许更改View(UI)的设计师。
许多事情很难在ViewModel中实现,例如根据ViewModel中的更改设置游标焦点(是的,这是可能的,但会增加代码的混乱)。
有关MVVM的好处是将值和命令组织为绑定,而不是直接设置字段,但这可以在没有ViewModel的情况下完成。
- 1. 我真的需要MVVM吗?
- 2. Flash10 + p2p真的有用吗?
- 3. encodeURIComponent真的很有用吗?
- 4. CDATA真的有必要吗?
- 5. 真的有必要使用Modernizr吗?
- 6. 参考取向真的有用吗?
- 7. 验证参数真的有用吗?
- 8. MathJax宝石真的有用吗?
- 9. Keydown只有真人物吗?
- 10. const auto &&真的没用吗?
- 11. 真的有像Objective C++的东西吗?
- 12. MVVM中的ViewModel应该引用View吗?
- 13. NUnit,MSTest等真的有区别吗?
- 14. 有人真的知道时间吗? (ha!)
- 15. 真的有一个Flex ++扫描仪吗?
- 16. 僵局 - 这真的会有帮助吗?
- 17. svnmerge真的有帮助我吗?
- 18. NHibernate - ITransaction.Commit真的有必要吗?
- 19. 用于Finanace产品的MVVM Light大约有40个模块吗?
- 20. 使用MVC,MVP,MVVM的真正的winforms/wpf项目
- 21. 有了MVVM,每个UI窗口都有自己的ViewModel吗?
- 22. 使用MVVM和WPF进行逼真的可视化
- 23. 使用Css3pie for IE7 + for Css3真的有用吗?
- 24. Android XML布局的“包含”标签真的有用吗?
- 25. Windows服务中的计时器 - 不是真的有用吗?
- 26. Hibernate的生成器类不是真的有用吗?
- 27. 将asmx SOAP webservice转换为ASP.NET上的REST:WCF真的有用吗?
- 28. 服务堆栈的DTO模式真的有用吗?
- 29. Lucene.NET可以与MVVM一起使用吗?
- 30. 我没有看到任何flyweight模式的使用。它真的有用吗?
当我开始使用MVVM时,我对此持怀疑态度,然后我观看了该视频,现在感觉不好,因为没有使用某种形式的MVVM与我的WPF应用程序。另外阅读Josh Smith撰写的Crack.NET的源代码也很有帮助。 – 2009-07-27 23:05:35