MVVM的独特优势

4
一个stackoverflow搜索会得到很多类似标题的帖子,但这是一个不同的问题。由于这不是讨论网站,我必须提出不同的问题。
使用MVVM相比于其他实现方式,我能获得哪些独特的好处?例如MVC、NTiers或其他任何东西。我并不是在寻找使MVVM与众不同的特征。我想知道除了MVVM之外,其他方法无法完成的事情。我的当前知识让我认为,MVVM是一种引入更多复杂性的做同样事情的不同方式,比如说nTiers。我不想从引入这种复杂性是负面的角度来看待它。如果它通过实现独特的好处而被证明是有价值的,那么我想了解这些好处。
深入的谷歌搜索只能得到MVVM的定义,没有发现这些独特的好处。

而在6个问题中获得3个赞并不算参与... - Ruben Bartelink
4个回答

5
我认为MVVM模式相比于MVP模式的唯一优势是,使用MVVM时不需要像在MVP实现中那样显式地将View附加到ViewModel(Presenter)上。这得益于WPF提供的功能(最重要的是BindingExpressions)。在MVP中,您需要定义一个接口来表示Presenter如何与View交互(IxxxxView是一种常规命名模式),当您创建Presenter时,将View接口传递给它(它附加到View实例上)。这也允许在公共Presenter之上进行一些视图变化。
在MVVM中,您不需要显式定义该接口。您定义ViewModel并使用Binding将ViewModel(逻辑)连接到View(展示)。如果绑定是在XAML中完成的,则View中没有关于ViewModel的内在知识,因为绑定在运行时(或有时在设计器中)解析。理论上,WPF应用程序应该能够完全不使用UI驱动。
从MVVM/MVP/MVC中获得的主要好处是演示和业务逻辑之间的责任分离以及由此带来的好处。它允许特定技能角色(即实际的图形设计师)在不必了解C# / VB.NET代码的情况下处理演示文稿。他们可以构建演示,然后开发人员会在稍后连接它们。
此外,开发人员现在有了模式,可以通过单元测试自动化测试代码。因为应用程序可以(大部分)不使用UI进行驱动,所以单元测试是一种允许开发人员真正运行他们编写的所有代码的好工具。
这并没有真正解决“N-Tier”和MVVM之间的比较,因为我不知道这是否是一个苹果与苹果的比较。可以说,MVVM WPF应用程序是N层应用程序,在解决方案中有几个逻辑层。
最终,MVVM/MVP/MVC都是非常可比的模式,具有相同类型的好处。但是,我所知道的MVVM只能在WPF / Silverlight是首选演示技术时使用。我想这是MVVM的一个独特优势。它是我们在WPF中的特定且最佳模式。在使用MVVM之后,在WPF中使用任何其他模式都会感到笨重。

2

MVVM是对“Model-View-Presenter”模式的微小改进。与MVVM的唯一区别在于,“视图模型”类专门设计为与WPF和Silverlight内置的数据绑定功能相协作,以最小化在视图本身中需要任何代码(保持视图纯粹是可以在设计师中编辑/替换的XAML标记)。如果您正在使用WPF或Silverlight,它绝对值得仔细研究。如果您使用的是其他任何东西,则不适用。


@用户 - 请点击您最喜欢的复选标记。 - Robert Levy

2
MVVM只是Presentation Model模式的一种技术实现。
最大的优点在于,如果你保持标记和代码的清晰分离,你可以专注于应用程序的行为(即代码),并让专业的图形设计师负责应用程序的外观和感觉。
这两个任务甚至可以由使用不同工具(例如Visual Studio vs. Expression)的两个不同人员并行完成。
你可以通过其他模式获得许多好处,但MVVM特别适合Microsoft提供的工具支持。

嗯,是的。如果您在Java框架中看到此文章并使用MVVM,则可以看到Presentation Model模式通常与具有良好数据绑定技术的任何框架非常搭配。因此,Model-View-Binder的名称可能更自然地适用于该模式。 "使用ZK Java AJAX框架实现事件驱动的GUI模式" http://www.ibm.com/developerworks/websphere/zones/portal/proddoc/zkjavaajax/ - simbo1905

0

这里有一篇关于Java框架实现MVVM(“演示模型”),MVP(“被动视图”)和混合MVVMP / MVC(“监督控制器”)的文章。我认为这与问题相关,因为它比较了这些模式,并且在WPF之外看到它的应用可能有助于形成对模式、框架以及尝试使用事件驱动GUI设计模式时的选择和影响的看法。

使用ZK Java AJAX框架实现事件驱动GUI模式

它提到MVVM的一个明显优点是您可以将相同的视图模型与不同的屏幕共享。因此,一个视图模型可以由鼠标屏幕和表格触摸屏幕共享。一个视图模型可以通过只读屏幕向某些用户显示,并通过不同的布局读写屏幕向其他用户显示。这是在独立于布局(即视图)的情况下对屏幕状态和行为进行建模的副作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接