Why MVVM and what are it's core benefits?
为什么在处理WPF时我们选择通过MVC或MVP进行MVVM?
通过使用此方法,我们还能获得什么额外的好处?
编辑:
老实说,今天我接受了采访,有人问我这个问题。 我像INotifyPropertyChanged,ICommand,IValue Convertor ..那样回答,但是他不满意。 从今以后我提出了这个问题
提前致谢
我将为您介绍Jason Dolinger的特别有用的视频。
来自WinForms的世界,实现任何MVX样式模式似乎都比它值得的麻烦。但是,在与WPF合作了几年之后,我可以坦白地说,我不会考虑其他任何事情。开箱即用地支持整个范例。
首先,主要好处是可以真正分隔
其次,尽管您的
您还可以使用
最重要的是,您支持
我确实有很多额外的东西可以解决,但是Jason说我可以做的更好,所以我的建议是观看视频。经过几天的工作,您会想知道没有它会怎样。
祝好运。
这些是我的MVVM特有的
就它们所关注的问题而言,其他两种模式实际上是分开的。您可以将MVVM与MVP和MVC一起使用(那里的大多数最佳示例都可以执行此操作)。
实际上,我认为MVP(带有被动视图,而不是监督控制器)实际上只是MVVM的一种。
WPF具有比任何其他UI框架更好的数据绑定,如果没有这些框架,MVVM将是不守常规的
MVVM提供了单元可测试性和出色的视图不可知论性,使其成为一件好事
支持ICommand和INotifyPropertyChanged是最大的两个好处。使用MVVM可以非常轻松地连接命令并将数据插入WPF UI。事情就可以了。
我个人认为MVVM并不是好处,而是对那些希望使用WPF炫酷功能的人的义务。
WPF的构建非常强大,其核心是数据绑定,以实现UI与模型的分离。但是技术上在WPF中完成数据绑定的方式有些特殊,因为它与以下类相关:
- 依赖属性
- INotifyPropertyChanged
- ObservableCollection
因此,您无法真正使用标准.NET技术编写模型。例如,WPF TreeView几乎不可能通过数据绑定和模板一起使用。您无法像从Winforms中的通用模型那样简单地填充它。它必须使用ObservableCollection绑定到层次结构模型,以表示节点的子级。
因此,假设V代表XAML代码,并且它是代码后的对应代码(因此它与WPF作为一种技术相关联),并且说M代表您的模型(因此无论如何它均与WPF UI技术无关)。
好吧,仅凭这些V&M,您将永远无法在WPF下正常工作。
您必须在两者之间添加一些内容。与WPF兼容并且可以理解您的模型。讲DependencyProperty,ObservableCollection和INotifyPropertyChanged的东西。那就是所谓的VM。
附带说明,MVVM的替代方法是构建V&M(不包含VM管道)组合,其中M与WPF兼容,但仍具有合理的UI独立性。从历史上看,ObservableCollection位于WindowsBase.dll程序集(随WPF一起提供)中,因此将通用模型绑定到与UI技术相关联的东西真的很奇怪。从那以后,它已移回System.dll。即使这样,有时也很难保持纯虚拟机模型,而无需专门为WPF调整M ...
XAML代码进行数据绑定的能力以及触发器的存在将破坏MVP和MVC模式。