为什么MVVM,什么是它的核心利益?(Why MVVM and what are it's

2019-09-02 06:44发布

为什么我们去MVVM在MVC或MVP在处理WPF?

什么额外的好处,我们利用这个得到什么?

编辑:

说实话,今天我有一个采访,我一直在问这个问题。 我回答像INotifyPropertyChanged的,ICommand的,IValue转换器..但他并不满足。 从此以后我都忍了这个问题

提前致谢

Answer 1:

我会指出你一个特别有用的视频由杰森Dolinger。

从一个WinForms世界的到来,实施任何MVX风格的图案似乎是更多的麻烦比它的价值,但现在用WPF工作了几年后,我可以诚实地说,我不会考虑任何东西少。 整个模式支持外的开箱。

首先,关键的好处是能够使之间的真正分离viewmodel 。 这也就意味着实质是,如果/当你的模式需要改变,它可以在不认为需要以反之亦然。

其次,虽然你的model可能包含你可能需要在你的所有数据view ,您可能希望抽象的,在这样的数据,你的model不支持。 例如,假设您的模型包含日期属性。 在模型中可以单独存在,作为一个DateTime对象,但你的观点可能要提出它在一个完全不同的方式。 如果没有viewmodel你要么必须重复属性的model ,支持查看或修改它会严重混淆了“模式”的属性。

你也可以使用一个viewmodel来存在于不同的类/库模型的总部位,以促进一个更流畅的接口,为view处理。 这是非常不可能的,你会想用数据在你的代码中,用户将要或将要展现给他们的数据相同的方式工作。

最重要的是,你会得到自动的双向数据之间的绑定支持viewviewmodel

真的是的,我可以喋喋不休,但杰森额外的东西一大堆说的它好得多 ,我可以让我的建议是,观看视频。 经过这样的工作了几天,你会怀疑你是怎样获得的,没有它。

祝好运。



Answer 2:

这些是我特有的MVVM

  1. 增加了你的意见 (能够使用Expression Blend的设计视图)“可混合性”。 这使得责任的团队,足够幸运,有一个设计师和程序员的分离......每一个都可以独立工作,其他的。
  2. “无外观”视图逻辑 。 视图是从它们后面运行,从而实现相同的视图逻辑在多个视图被重用或具有容易改良后或更换的视图的代码无关的。 方式隔开的“行为”和“风格”之间的关注。
  3. 没有重复的代码更新视图 。 在代码隐藏,你会看到很多电话到“myLabel.Text = NEWVALUE”到处撒。 随着MVVM你可以通过设置基本属性和所有考虑到其副作用可以放心的观点被适当地更新。
  4. 可测性 。 因为你的逻辑是完全无关的视图(没有“myLabel.Text”引用)的,单元测试变得容易。 您可以测试一个视图模型的行为,而不涉及其观点。 这也使的视图的行为,使用代码隐藏这几乎是不可能的测试驱动开发。

另外两种模式是真正的排序中分离出来的,他们处理这些问题方面。 你可以用MVP和MVC使用MVVM(最好样在那里做一些形式的这一点)。

事实上,MVP(W / A被动视图,而不是监督控制器)真的只是一个MVVM的变型,在我看来。



Answer 3:

WPF比任何其他UI框架,这MVVM将没有不羁更好的数据绑定

MVVM提供单位可测试性和良好的视野,不可知论,这使得它使用好东西



Answer 4:

烤在ICommand的和INotifyPropertyChanged的支持是两个最大的好处。 使用MVVM使得它可以很容易的命令和插头的数据线了到WPF UI。 事情就这样工作。



Answer 5:

我personnaly看到MVVM不是一个好处,但对于那些谁想要使用WPF很酷的功能的义务。

WPF是非常非常严重与核心数据结合,从模型使UI的分离建成。 但是,数据绑定在WPF在技术上做的方式有点特殊,因为它依赖于像类:

  • 的DependencyProperty
  • INotifyPropertyChanged的
  • 的ObservableCollection

正因为如此,你就不能真正写一个模型,你要使用标准的.NET技术的方式。 例如,WPF TreeView的是几乎不可能使用的w / o使用数据绑定和模板。 你就不能来填充它只是想从你Winforms中的通用模型,例如会。 它必须使用的ObservableCollection代表一个节点的孩子被绑定到一个层次模型。

所以我们说V代表的XAML代码,它的代码隐藏副本(所以它绑在WPF作为一种技术),并假设M代表模型(所以它不依赖于WPF UI技术,反正)。

好吧,你永远不会有这方面的工作正常WPF下,只有这些V&M。

必须添加两个之间的事情。 东西是WPF的兼容和理解你的模型。 东西讲的DependencyProperty,和的ObservableCollection INotifyPropertyChanged的。 这就是被称为VM。

作为边注,以MVVM一种替代方法是建立与M为WPF兼容,但仍具有合理的UI独立性一个V&M(W / O VM管道)的组合。 从历史上看,是的ObservableCollection在WindowsBase.dll中组件(附带提供WPF),所以它真的看起来怪异的通用模型绑定的东西绑在用户界面技术。 它已经因为搬回System.dll中。 即便如此,它有时很难保持一个纯粹的虚拟测量模型W / O专门调整了M代表WPF ...



Answer 6:

的XAML代码数据绑定的能力,以及触发器是否存在等将打破MVP和MVC模式。



文章来源: Why MVVM and what are it's core benefits?
标签: wpf mvvm