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

android MVC,MVP,MVVM相关推荐

  1. android MVC,MVP,MVVM概论

    1.MVC思想 无论在任何情况下,软件设计都要符合高内聚,低耦合的思想.如果背离这一原则,代码将很难进入维护. MVC出现与上世纪70年代,在三十多年的工程实践中,MVC充分证明了它的成功.在软件开发 ...

  2. Android MVC,MVP,MVVM模式入门——重构登陆注册功能

    一  MVC模式: M:model,业务逻辑 V:view,对应布局文件 C:Controllor,对应Activity 项目框架: 代码部分: layout文件(适用于MVC和MVP两个Demo): ...

  3. Android MVC ,MVP,MVVM 常见架构浅谈

    简述:其实任何架构的目的都是:提高开发效率,降低维护成本: MVC: Model: 负责处理数据逻辑,一般包括操作数据库,耗时网络操作等组成: View:负责处理视图: 一般是xml布局: Contr ...

  4. Android中常见的MVC/MVP/MVVM模式

    Android中常见的MVC/MVP/MVVM模式 经典MVC 在1979年,经典MVC模式被提出. 在当时,人们一直试图将纯粹描述思维中的对象与跟计算机环境打交道的代码隔离开来,而Trygve Re ...

  5. Android 系统(77)---MVC,MVP,MVVM的区别

    MVC,MVP,MVVM的区别 一.MVC 软件可以分为三部分 1.Model:模型层,负责处理数据的加载或者存储  2. View:视图层,负责界面数据的展示,与用户进行交互  3.Controll ...

  6. Android App的设计架构:MVC,MVP,MVVM与架构经验谈

    本文转载自https://www.tianmaying.com/tutorial/AndroidMVC,原文作者周鸿博. 和MVC框架模式一样,Model模型处理数据代码不变在Android的App开 ...

  7. [Android答答答]什么是MVC/MVP/MVVM

    什么是MVC/MVP/MVVM? 概念 1.MVC是什么? 2.MVP是什么 3.MVVM是什么 原理 1.MVC的特点是什么 2.MVP的特点是什么 3.MVVM的特点是什么 概念 1.MVC是什么 ...

  8. Android架构设计之MVC/MVP/MVVM浅析

    目录 写在前面 一.案例演示 二.MVC模式 2.1.MVC简介 2.2.MVC模式的使用 2.3.MVC模式的缺点 三.MVP模式 3.1.MVP简介 3.2.MVP模式的作用 3.3.MVP模式的 ...

  9. MVC---Android App的设计架构:MVC,MVP,MVVM与架构经验谈

    转载自: http://www.tianmaying.com/tutorial/AndroidMVC 1.架构设计的目的 通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合.这样做的好处是使 ...

最新文章

  1. djangorestframework怎么这么好用!
  2. CSS 居中完全指南
  3. Java注解(Annotation)详解
  4. 漫谈高数曲线积分的物理意义
  5. 从A页面跳转到B页面动态路由参数
  6. opencv-api contourArea
  7. 158.用 Read4 读取 N 个字符read characters from file multiple calls
  8. http请求头中包含未编码中文时webapi self host崩溃
  9. 【u008】瑞瑞的木棍
  10. 用jquery编写简易计算器
  11. matlab中提取裂缝图像,灰度图像中裂缝自动识别和检测方法与流程
  12. 详解电子名片不一样的展示推广功能
  13. 终端进入服务器,mac使用Shell(终端)SSH连接远程服务器的方法
  14. android手机整体规模,2021年Android手机市场规模
  15. 银行业务系统设计特点概述
  16. 矩阵树定理--luoguP4208 [JSOI2008]最小生成树计数
  17. 美团滑块(1-18,js逆向)
  18. 什么是正则化?他是如何起作用的?
  19. HTML网页设计:爱护动物题材——保护动物大象(6页) HTML网页设计结课作业 web课程设计网页规划与设计 网页设计成品DW静态网页
  20. Qt事件体系概述(The Event System)

热门文章

  1. spring-boot-starter-data-redis
  2. 如何将PDF转换成SWF
  3. 基于流计算 Oceanus(Flink) CDC 做好数据集成场景
  4. gmt php,如何将php日期格式转换为GMT,反之亦然?
  5. Android 应用商店的思考
  6. Java解决时间小时时差问题
  7. 中马“两国双园”成中企投资东盟国际产能重要平台
  8. linux 创建子进程,linux中fork同时创建多个子进程的方法(一)
  9. 天才学生的天才回答(爆笑)
  10. java图片加气泡文字_图片加气泡文字