android MVC,MVP,MVVM

来源:互联网 发布:影视源码自动采集 编辑:程序博客网 时间:2024/05/11 05:46

1、MVC思想

无论在任何情况下,软件设计都要符合高内聚,低耦合的思想。如果背离这一原则,代码将很难进入维护。

MVC出现与上世纪70年代,在三十多年的工程实践中,MVC充分证明了它的成功。在软件开发其他领域都得现MVC的设计思想。

1、模型层(Model):处理业务逻辑的代码,比如查询数据库,从网络获取数据等都在model层中处理。
2、控制层(Controller):负责把模型层中处理的数据,显示给xml,也负责获取用户在view层中操作的数据给model层。比如Activity,Fragment。
3、视图层(View):负责显示,比如xml文件
从网上找的图片可以明确的显示
这里写图片描述


这里写图片描述

这样最形成MVC结构图片,从图片中也可以看出Controller(Activity,Fragment)不仅要填充View,又要把Model层中取出数据给View层。

从上面分析可以得出,在Android中使用MVC模式,严重依赖Controller(Activity,Fragment)代码耦合性非常高,并且有可以能Controller变得臃肿,代码量特别大。如果Controller层的变动,直接响应到View层和Model层。
缺点:
1. 耦合性太高一方面Activity耦合,另一方面View和Model层耦合
2. 没有办法进行单元测试。

2、MVP思想

从上面可以看出MVC中的一些不足,因此就产生新的思想。MVP也就随之诞生。可以说MVP是在Android中对MVC思想的一种改良。
1、Model层:与MVC中一样,处理业务逻辑,请求网络数据,查询数据库等相关操作
2、View:视图层,在这里Activity已经做为显示层。在MVC中Activity做为控制层。
3、Presenter:Presenter层与Model层进行交互,然后再来刷新View层的显示。
这里写图片描述
这样图片上显示转换
View层与Model层已经不再耦合。他们只能通过Presenter这一指挥器来进行交互。

从上面可以看出MVP的确改进了,MVC中M层与V层的耦合。但是随着业务的越来越复杂,View层的缺点暴漏出来,就是Activity处于显示层,却有很多其他非显示层的代码。

缺点:

1. View层与Presenter耦合。
2. View随着业务复杂难以维护

3、MVVM思想

2015年Google IO 大会上,Android 团队发布了一个数据绑定框架(Data Binding Library)。以后可以直接在 layout 布局 xml 文件中绑定数据了,无需再 findViewById 然后手工设置数据了。这应该是只MVVM思想的一点点体现吧,至于其他方面Google目前并没有给其他API来应用。
这里写图片描述


这里写图片描述

通过这种方式,祢补了在MVP中View层与Prestner耦合我缺陷。
ViewModel从网络或者数据库中获取数据,而View层与ViewModel存在绑定关系。因此View也得到更新。
优点:

  1. 便于代码的移植
  2. 单元测试
  3. 兼容MVC

缺点:

  1. ViewModel会越来越庞大。
  2. 类会增多,代码量可能增加。
  3. 编写复杂度提高。

4、总结

无论是MVC,MVP,还是MVVM基本上都遵循代码解耦的思想。在实际开发中,一些业务的需求并不是定要用哪个模式比较好,而是根据具体的需求。比如说一个非常简单没有几个功能的app,如果按照MVP,MVVM思想,反而加大代码量,使得不容易维护。一切还是按照自己的需求来定自己合适的开发模式。

通过下面的文章和实例,能够更好的理解
1、MVC的例子
http://www.2cto.com/kf/201506/405766.html

2、MVP的例子
http://gold.xitu.io/entry/576bb0c4816dfa0055c0cf17/promote?utm_source=baidu&utm_medium=keyword&utm_content=android_mvp&utm_campaign=q3_search

3、MVVM的例子
http://www.jianshu.com/p/f4faa720f00d

1 0
原创粉丝点击