stackoverflow搜索将导致包含类似标题的多个帖子,但这是另一个问题。由于这不是一个讨论网站,我不得不问一个不同的问题。
使用MVVM可以从其他任何实现中获得哪些独特的好处? MVC。 NTiers,或其他任何东西。我并不是真的在寻找使MVVM与众不同的识别功能。我正在寻找除了MVVM之外无法做到的事情。我目前对它的了解使我认为,MVVM是一种不同的方式来做同样的事情,引入更多的复杂性然后说nTiers。我不想采取这种复杂性的引入的角度,是一个消极的事情。如果通过实现独特的利益来证明这一点,那么我想知道这一点。
一个深入谷歌,只发现了MVVM的捍卫。它没有发现这些独特的好处。答案 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的明显优势是你可以用不同的屏幕共享相同的视图模型。因此,视图模型可以由鼠标屏幕和桌面触摸屏共享。可以通过只读屏幕向一些用户显示视图模型,并向其他用户显示不同的布局读写屏幕。如果屏幕独立于作为视图的布局,则这是建模状态和行为的副作用。