MVVM独特的好处

时间:2011-04-09 03:29:27

标签: design-patterns mvvm

stackoverflow搜索将导致包含类似标题的多个帖子,但这是另一个问题。由于这不是一个讨论网站,我不得不问一个不同的问题。

使用MVVM可以从其他任何实现中获得哪些独特的好处? MVC。 NTiers,或其他任何东西。我并不是真的在寻找使MVVM与众不同的识别功能。我正在寻找除了MVVM之外无法做到的事情。我目前对它的了解使我认为,MVVM是一种不同的方式来做同样的事情,引入更多的复杂性然后说nTiers。我不想采取这种复杂性的引入的角度,是一个消极的事情。如果通过实现独特的利益来证明这一点,那么我想知道这一点。

一个深入谷歌,只发现了MVVM的捍卫。它没有发现这些独特的好处。

4 个答案:

答案 0 :(得分:5)

我能想到的唯一好处是MVVM上的MVVM模式(它是一个变体)是在MVVM中,你不需要像你一样将View显式附加到ViewModel(Presenter)会在MVP实施中。这是由WPF提供的设施实现的。 (最重要的是BindingExpressions)在MVP中,您将定义一个界面,该界面表示演示者如何与视图交互(IxxxxView是一种传统的命名模式),当您创建演示者时,您将视图界面传递给它(附加)到视图实例)。这确实允许在公共演示者之上进行一些视图变化。

在MVVM中,您没有显式定义该接口。您定义ViewModel并使用Binding将ViewModel(逻辑)挂钩到View(演示文稿)。视图中没有ViewModel的内在知识,因为绑定(如果它们在XAML中完成)在运行时(或有时在设计器中)得到解析。理论上,WPF应用程序应该能够在没有UI的情况下完全驱动。

您从MVVM / MVP / MVC获得的好处主要是表示和业务逻辑之间的关注点分离以及它允许​​的内容。它允许专门的技术角色(阅读:实际图形设计师)在演示文稿上工作而无需了解C#/ VB.NET代码。他们可以构建演示文稿,然后开发人员会出现并将事情搞砸。

此外,开发人员现在拥有允许通过单元测试自动测试代码的模式。因为应用程序可以(大多数情况下)在没有UI的情况下驱动,所以单元测试是一个很好的工具,可以让开发人员真正运用他们编写的所有代码。

这并没有真正解决“N-Tier”和MVVM之间的比较,因为我不知道那是苹果与苹果的比较。可以说,MVVM WPF应用程序是N层应用程序,在解决方案中有几个逻辑层。

最终,MVVM / MVP / MVC都是非常可比的模式,具有相同的好处。但有一件事是,我知道MVVM只能在WPF / Silverlight是首选的演示技术时使用。我想这是MVVM的一个独特优势。它是WPF / Silverlight中的特定和最佳模式。在使用MVVM之后,在WPF中使用任何其他模式会感到笨拙。

答案 1 :(得分:2)

MVVM只是“Model-View-Presenter”类模式的一个微小转折。与MVVM唯一不同的是,您的“视图模型”类专门设计用于与WPF和Silverlight内置的数据绑定功能很好地配合,以最大限度地减少对任何代码的需求。查看自身(保持View纯XAML标记,可以在设计器中编辑/替换)。如果您使用的是WPF或Silverlight,那么它绝对值得一看。如果您正在使用其他任何东西,那么它并不适用。

答案 2 :(得分:2)

MVVM只是Presentation Model模式的技术特定的实现。

主要优点是,如果您保持干净的标记和代码分离,您可以专注于应用程序的行为(即代码)并让专业人士图形设计师关于应用应用程序的外观和感觉

这两项任务甚至可以由两个不同的人使用不同的工具(例如Visual Studio与Expression)并行处理。

您可以通过其他模式获得许多好处,但MVVM专门用于Microsoft提供的工具支持

答案 3 :(得分:0)

这是一篇关于执行MVVM(“演示模型”),MVP(“被动视图”)和混合MVVMP / MVC(“监督控制器”)的Java框架的文章。我认为它与问题相关,因为它比较模式并看到它在WPF之外完成可能有助于形成关于模式是什么,框架是什么以及尝试使用事件的选择和力量的意见。驱动的GUI设计模式。

Implementing event-driven GUI patterns using the ZK Java AJAX framework

它提到MVVM的明显优势是你可以用不同的屏幕共享相同的视图模型。因此,视图模型可以由鼠标屏幕和桌面触摸屏共享。可以通过只读屏幕向一些用户显示视图模型,并向其他用户显示不同的布局读写屏幕。如果屏幕独立于作为视图的布局,则这是建模状态和行为的副作用。