Android产品研发(二十五)-- MVC、MVP、MVVM开发模式

作者: android01 发布时间: 2019-08-27 浏览: 163 次 编辑

本文我们将讲解Android开发中常常涉及到的MVC/MVP/MVVM等模式的基本概念。许多童鞋对Android开发中涉及到的MVC、MVP、MVVM这三种模式不是太清楚,我认为无论是MVC、MVP亦或者是MVVM都是一种代码组织方式,通过这种代码组织方式能够让代码更有层次感,各个层次主要负责各自的工作,这样降低了整个项目的代码逻辑耦合度与可读性。

下面对MVC、MVP、MVVM等设计模式逐一的做一下说明:

MVC开发模式:

MVC,即Model层,View层,Control层,在JAVAEE中MVC是一种经典的开发模型,下面是引用的一段对其的说明:

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。其中M层处理数据,业务逻辑等;V层处理界面的显示结果;C层起到桥梁的作用,来控制V层和M层通信以此来达到分离视图显示和业务逻辑层。

简单来讲就是:

  • 视图(View):用户界面

  • 控制器(Controller):业务逻辑

  • 模型(Model):数据保存

MVC它的数据流转:

这里写图片描述
(盗用了一下网上的图...)

  • 用户操作界面,View接受指令,View 传送指令到 Controller,也就是从View层到Control层的箭头所示

  • Controller 完成业务逻辑后,要求 Model 改变状态,也就是从Control层到Model层的箭头所示

  • Model 将新的数据发送到 View,用户得到反馈,也就是从Model层到View层的箭头所示

Android中MVC模式的体现:

其实Android开发的主要流程都是MVC模式的,比如我们常见的Activity+Layout+Model展示业务逻辑的模式,其中:

Activity - 对应着Controller层,主要是控制层,用于实现业务逻辑

Layout - 对应着View层,主要用于展示页面

Model - 对应着Model层,主要是保存数据

MVC模式的优势:

  • 使用MVC模式降低了程序中的耦合度,使应用程序视图层与Model层分离,减少了代码之间的相互影响;

  • 由于使用MVC模式降低代码耦合度,因此可以很方便的扩展现有程序;

  • 不同代码模块职责划分明确,有利于代码的维护与升级;

MVP开发模式:

MVP开发模式是MVC模式一种进阶,MVP和MVC模型的主要区别是model层与View层不再发生关系而是通过Presenter层作为中间的枢纽。并且各个部分之间都是双向关联的;

简单来讲就是:

  • 视图(View):用户界面

  • 控制层(Presenter):业务逻辑(负责与View层和Model层双向交互)

  • 模型(Model):数据保存

MVP它的具体数据流转是这样的:

这里写图片描述
(盗用了一下网上的图...)

  • 用户操作界面,View接收指令,View传送指令到Presenter层,也就是从View层到Presenter层的箭头所示

  • Presenter完成业务逻辑后,要求Model改变状态,也就是从Presenter层到Model层的箭头所示

  • Model状态改变之后将结果返回给Presenter层,然后Presenter层在将结果反馈到View层,也就是从Model层到Presenter层,从Presenter层到View层的箭头所示

在MVP里,Presenter完全把Model和View进行了分离,主要的程序逻辑在Presenter里实现。而且,Presenter与具体的View是没有直接关联的,而是通过定义好的接口进行交互,从而使得在变更View时候可以保持Presenter的不变。

MVP模式的优势:

  • MPV开发模式与MVC开发模式有的优势相似,都是降低了代码的耦合度

  • 使用MVP模式View层与Model层不在相互关联,可以更高效地使用模型,因为所有的交互都发生在一个地方——Presenter内部

MVVM它的具体数据流转是这样的:

MVVM与MVP是相类似的,唯一的区别是,它采用双向绑定(data-binding):View的变动,自动反映在 ViewModel,反之亦然。

简单来讲就是:

  • 视图(View):用户界面

  • 控制层(VM):业务逻辑(负责与View层和Model层双向交互)

  • 模型(Model):数据保存

这里写图片描述
(盗用了一下网上的图...)

  • 用户操作界面,View接收指令,View传送指令到Presenter层

  • ViewModel完成业务,改变Model层数据

  • Model状态改变之后将结果返回该ViewModel层,然后ViewModel层自动更新View层显示

注:google提供的官方data binding框架采用的就是MVVM模型

参考文章:
MVVM大话开篇
MVC,MVP 和 MVVM 的图示


产品研发系列课程目录:

Android产品研发(一)-->实用开发规范

Android产品研发(十)-- 不使用静态变量保存数据

Android产品研发(十九)-- Android Studio 单元测试

Android产品研发(二)-- 启动页优化

Android产品研发(十一)-- 应用跳转协议scheme

Android产品研发(二十)-- 代码Review

Android产品研发(三)-- 基类Activity

Android产品研发(十二)-- App长链接实现

Android产品研发(二十一)-- Android中的UI优化

Android产品研发(四)-- 较少Apk大

Android产品研发(十三)-- App轮训操作

Android产品研发(二十二)-- Android 使用调试技巧

Android产品研发(五)-- 多渠道打

Android产品研发(十四)-- App升级与更新

Android产品研发(二十三)-- Android 中保持静态密钥实战

Android产品研发(六)-- Apk混淆

Android产品研发(十五)-- 内存对象序列化

Android产品研发(二十四)-- 内存泄漏场景与检测

Android产品研发(七)-- 较少Apk热修复

Android产品研发(十六)-- 开发者选项


Android产品研发(八)-- 数据统计

Android产品研发(十七)-- Hybrid开发

Android产品研发(九)-- 较少App网络传输协议

Android产品研发(十八)-- WebView问题集锦