开发模式总结:MVCMVP&MVVM

Posted 广东金融IT课程学习

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开发模式总结:MVCMVP&MVVM相关的知识,希望对你有一定的参考价值。

1 简介

三者的目的都是分离关注,使得UI更容易变换(从Winform变为Webform),使得UI更容易进行单元测试。


2 MVC MVP

2.1 MVC

  1、View接受用户的交互请求,

  2、View将请求转交给Controller,

  3、Controller操作Model进行数据更新

  4、数据更新之后,Model通知View数据变化

  5、View显示更新之后的数据


View和Controller使用Strategy模式实现,View使用Composite模式,View和Model通过Observer模式同步信息。Controller不知道任何View的细节,一个Controller能被多个View使用。MVC的一个缺点是很难对controller进行单元测试,Controller操作数据,但是如何从View上断言这些数据的变化呢?例如,点击一个View的按钮,提交一个事件给Controller,Controller修改Model的值。这个值反映到View上是字体和颜色的变化。测试这个Case还是有点困难的。


2.2 MVP

  1、 View接受用户的交互请求

  2、 View将请求转交给Presenter

  3、 Presenter操作Model进行数据库更新

  4、 数据更新之后,Model通知Presenter数据发生变化

  5、 Presenter更新View的数据


Presenter将Model的变化返回给View。和MVC不同的是,presenter会反作用于view,不像controller只会被动的接受view的指挥。正常情况下,发现可以抽象view,暴漏属性和事件,然后presenter引用view的抽象。这样可以很容易的构造view的mock对象,提高可单元测试性。在这里,presenter的责任变大了,不仅要操作数据,而且要更新view。


在现实中mvp的实现会根据view的充、贫血而有一些不同,一部分倾向于在view中放置简单的逻辑,在presenter放置复杂的逻辑,另一部分倾向于在presenter中放置全部的逻辑。这两种分别被称为:Passive View和Superivising Controller。


在Passive View中,为了减少UI组件的行为,使用controller不仅控制用户事件的响应,而且将结果更新到view上。可以集中测试controller,减小view出问题的风险。


在Superivising Controller中的controller既处理用户输入的响应,又操作view处理view的复杂逻辑。


3 M-V-VM


MVVM模式是Model-View-ViewMode模式的简称。由视图(View)、视图模型(ViewModel)、模型(Model)三部分组成,结构如下图。通过这三部分实现UI逻辑、呈现逻辑和状态控制、数据与业务逻辑的分离。


MVVM是在原有领域Model的基础上添加一个ViewModel,这个ViewModel除了正常的属性意外,还包括一些供View显示用的属性。例如在经典的MVP中,view有一个属性ischeck,需要在presenter中设置view的ischeck值。但是在MVVM中的presenter也会有一个ischeck属性来同步view的ischeck属性,可能会用到observer模式同步ischeck的值。在MVVM中,presenter被改名为ViewModel,就演变成了你看到的MVVM。在支持双向绑定的平台,MVVM更受欢迎。例如:微软的WPF和Silverlight。



【威哥说】

我们通常说的RIA(Rich Internet Application)技术是近年来发展较快的实现Web2.0应用开发的技术,与传统的Web应用相比,RIA技术更加追求更丰富的用户体验。适应这种变化,RIA应用系统开发过程的分工要求更加细致,一部分人负责界面设计,一部分人负责业务逻辑设计。这种分工写作给软件设计模式带来新的要求,一方面要保持系统易于理解和维护、良好的扩展性和低耦合度,另外一方面要追求业务逻辑、呈现逻辑和UI逻辑的分离,使得界面设计和程序控制开发可以同步进行。目前在RIA应用系统中开发使用比较多的有MVC、MVP等设计模式,但是这些模式并不能完全将UI设计分离。为此将呈现逻辑从视图中独立出来,同时将界面数据从模型中独立出来,组成视图模型(ViewModel)模块,形成了MVVM(Model-View-ViewModel)模型,我们可以认为MVVM是MVC的变种。MVVM模式不但能够实现UI设计的分离,而且能充分发挥RIA技术中的数据绑定的技术和特点,提高软件的复用性。



以上是关于开发模式总结:MVCMVP&MVVM的主要内容,如果未能解决你的问题,请参考以下文章

Android 对比MVCMVP来聊聊MVVM模式的理解

MVCMVP和MVVM模式的基础认识

MVCMVP和MVVM模式的基础认识

对比MVCMVP来聊聊MVVM模式的理解

MVCMVP与MVVM架构模式

MVCMVP和MVVM的图示