为什么MVVM及其核心优势是什么?

pri*_*kar 37 wpf mvvm

为什么我们在处理WPF时会使用MVVM而不是MVC?

使用它可以获得多大的好处?

编辑:

说实话,今天我接受了采访,我被问到这个问题.我的答案像INotifyPropertyChanged,ICommand,IValue Convertor ..但他并不满意.从此我提出了这个问题

提前致谢

Eig*_*ite 47

我会给你一个Jason Dolinger 特别有用的视频.

来自WinForms世界,实现任何MVX风格模式似乎比它的价值更麻烦但是在与WPF合作几年之后,我可以诚实地说我不会考虑更少.整个范例都是开箱即用的.

首先,关键的好处是实现view和之间的真正分离model.实际意义上的含义是,如果/当您的模型需要更改时,它可以在没有视图需要的情况下反之亦然.

其次,虽然您model可能包含您可能需要的所有数据view,但您可能希望以model不支持的方式抽象数据.例如,假设您的模型包含日期属性.在模型中,它可以仅作为DateTime对象存在,但您的视图可能希望以完全不同的方式呈现它.没有viewmodel你要么必须复制该属性model以支持视图或修改可能严重模糊"模型"的属性.

您还可以使用a viewmodel来聚合模型中存在于单独的类/库中的部分,以便view为处理提供更流畅的界面.这是非常不可能的,你会想用数据在你的代码中,用户将要或将要展现给他们的数据相同的方式工作.

最重要的是,您可以获得view和之间自动双向数据绑定的支持viewmodel.

确实有一大堆额外的东西我可以喋喋不休,但杰森说我的建议好得多,所以我的建议是观看视频.经过几天这样的工作,你会想知道没有它你是如何得到的.

祝好运.

  • Jason的视频绝对是我见过/读过的MVVM的最佳介绍.源代码可以在http://blog.lab49.com/archives/2689找到 (5认同)

And*_*mes 17

这些是我特有的MVVM

  1. 增加视图的"可混合性"(使用Expression Blend设计视图的能力).这样就可以将团队中的责任分离出来,这些团队有幸拥有设计师和程序员......每个人都可以独立于另一个人工作.
  2. "看不起"的观点逻辑.视图与在其后面运行的代码无关,使得相同的视图逻辑可以在多个视图中重用,或者可以轻松地重新组织或替换视图.分离"行为"和"风格"之间的关注.
  3. 没有重复的代码来更新视图.在代码隐藏中,你会看到很多对"myLabel.Text = newValue"的调用随处可见.使用MVVM,您可以确保仅通过设置基础属性及其所有视图副作用来适当更新视图.
  4. 可测试性.由于您的逻辑完全不了解您的视图(没有"myLabel.Text"引用),因此单元测试变得简单.您可以在不涉及其视图的情况下测试ViewModel的行为.这也启用了视图行为的测试驱动开发,使用代码隐藏几乎是不可能的.

另外两种模式在他们所关注的问题上实际上是分开的.您可以将MVVM与MVP和MVC一起使用(大多数好的样本都有这种形式).

事实上,在我看来,MVP(带有Passive View,而不是监督控制器)实际上只是MVVM的一个变种.

  • 对于MVC或MVP以及MVVM,2和4都适用. (2认同)

Rob*_*sor 5

WPF具有比任何其他UI框架更好的数据绑定,MVVM在没有这种框架的情况下是不可靠的

MVVM提供了单元可测试性和出色的视图不可知性,这使得它成为一件好事