开发模式总结:MVC、MVP&MVVM
2017-02-23 12:33
351 查看
1 简介
三者的目的都是分离关注,使得UI更容易变换(从Winform变为Webform),使得UI更容易进行单元测试。
2 MVC MVP
![](http://mmbiz.qpic.cn/mmbiz_jpg/tt2MnmreUJ31mV8pkicueV7VTYfBFdNwzQwBTib7KR6y8hbqYAzpqNoWicyUQ2D3L0Xctf24icMK0d6PmeNKBM45QQ/640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1)
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
![](http://mmbiz.qpic.cn/mmbiz_jpg/tt2MnmreUJ31mV8pkicueV7VTYfBFdNwzZU6kw0jc9m6pc2WiboRBFibBVBMVGetuoG1xra0P8MDw4PBndicrB6gmw/640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1)
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。
三者的目的都是分离关注,使得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。
相关文章推荐
- 架 c0b3 构模式:MVC,MVP&MVVM
- android中的MVC,MVP和MVVM模式简单总结
- Android开发模式之MVC,MVP和MVVM的简单介绍与区别
- Android开发模式之MVC,MVP和MVVM的简单介绍与区别
- 浅谈开发中的MVVM模式及与MVP和MVC的区别
- Android开发模式之MVC,MVP和MVVM的简单介绍与区别
- 三大开发模式的介绍(MVC、MVVM、MVP)
- Android开发模式之MVC,MVP和MVVM的简单介绍与区别
- Android开发框架模式MVC、MVP使用总结
- 浅析前端开发中的 MVC/MVP/MVVM 模式
- MVC,MVP和MVVM三种开发模式
- 浅谈Android开发中的MVVM模式及与MVP和MVC的区别
- Android开发模式之MVC,MVP和MVVM的简单介绍与区别
- iOS开发-进阶:架构模式--解密 MVC,MVP,MVVM以及VIPER架构
- 浅析前端开发中的 MVC/MVP/MVVM 模式
- Android开发模式之MVC,MVP和MVVM的简单介绍与区别
- Android开发模式之MVC,MVP和MVVM的简单介绍与区别
- 浅析前端开发中的 MVC/MVP/MVVM 模式
- iOS开发-进阶:架构模式--解密 MVC,MVP,MVVM以及VIPER架构(翻译)
- 浅谈开发中的MVVM模式及与MVP和MVC的区别