Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns MVVM的独特优势_Design Patterns_Mvvm - Fatal编程技术网

Design patterns MVVM的独特优势

Design patterns MVVM的独特优势,design-patterns,mvvm,Design Patterns,Mvvm,stackoverflow搜索将导致几个帖子包含相似的标题,但这是不同的问题。由于这不是一个讨论网站,我不得不问一个不同的问题 使用MVVM可以从任何其他实现中获得什么独特的好处?MVC。或者别的什么。我并不是真的在寻找使MVVM与众不同的识别特性。我在寻找除了MVVM之外其他任何东西都做不到的东西。我目前对它的了解使我认为,MVVM是一种不同的方式来做同样的事情,它引入了比其他人更复杂的东西。我不想从一个角度认为引入这种复杂性是一件消极的事情。如果这是合理的,使独特的利益,那么我想知道这一点

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

使用MVVM可以从任何其他实现中获得什么独特的好处?MVC。或者别的什么。我并不是真的在寻找使MVVM与众不同的识别特性。我在寻找除了MVVM之外其他任何东西都做不到的东西。我目前对它的了解使我认为,MVVM是一种不同的方式来做同样的事情,它引入了比其他人更复杂的东西。我不想从一个角度认为引入这种复杂性是一件消极的事情。如果这是合理的,使独特的利益,那么我想知道这一点


作为一个深入研究的谷歌,只发现了MVVM防御。它没有发现这些独特的好处

MVVM只是类“模型-视图-演示者”模式上的一个小转变。与MVVM的唯一区别在于,您的“视图模型”类专门设计为与WPF和Silverlight中内置的数据绑定功能配合使用,以最大限度地减少对视图本身中任何代码的需要(保持视图完全是XAML标记,可以在设计器中编辑/替换)。如果您正在使用WPF或Silverlight,那么绝对值得仔细查看。如果您使用的是其他任何东西,那么它就不适用了。

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

在MVVM中,没有显式定义该接口。定义ViewModel并使用绑定将ViewModel(逻辑)挂接到视图(表示)上。视图中没有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中使用任何其他模式都会感到笨拙。

MVVM只是表示模型模式的一个特定于技术的实现

主要优点是,如果保持标记和代码的清晰分离,您可以专注于应用程序(即代码)的行为,让专业图形设计师了解应用程序的外观

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


您可以从其他模式中获得许多好处,但MVVM特别发挥了Microsoft提供的工具支持的作用。

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


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

6个问题中的3个向上投票几乎没有参与…@user-请点击你最喜欢的问题旁边的复选标记好的,但是。如果您看到这篇文章在java框架中实现MVVM,那么我们可以看到,表示模型模式通常给MVVM起了一个绰号,它可以很好地与任何具有良好数据绑定技术的框架配合使用。因此,模型视图绑定器的名称MVB可能是该模式更自然的名字。“使用ZK Java AJAX框架实现事件驱动的GUI模式”