MVC、MVP和MVVM是常见的Android三种架构设计,随着时间的推移,MVC使用率逐渐下降,MVP和MVVM的使用相对比较广泛一些,还是那句话:没有最好的架构,只有最适合的架构。

一.MVC

a.简介

MVC (Model-View-Controller, 模型-视图-控制器):

模型层 (Model):业务逻辑对应的数据模型,与View无关,而与业务相关;

视图层 (View):一般使用XML或者Java对界面进行描述;

控制层 (Controller):在Android中通常指Activity和Fragment,或者由其控制的业务类。

b.调用关系

image.png

c.实现及依赖关系

image.png

d.优缺点

进步:完成了Controller和Model的隔离;

缺点:

1.Activity属于controller,但是controller具有view的代码,角色不清晰;

2.Activity权利很大,可以操作Model,也可以操作View,随着时间的推移,Activity会变的越来越臃肿;

应用场景:设置页面,只有View和Model这种开关设置界面。

二.MVP

a.简介

MVP (Model-View-Presenter) 是MVC的演化版本,主要部分如下:

模型层 (Model):主要提供数据存取功能。

视图层 (View):处理用户事件和视图,在Android中,可能是指Activity、Fragment或者View。

展示层 (Presenter):负责通过Model存取数据,连接View和Model,从Model中取出数据交给View。

Model和View不会直接发生关系,它们需要通过Presenter来进行交互。

b.调用关系

image.png

c.实现及依赖关系

image.png

d.优缺点

进步:完成了Activity的拆分,controller---->presenter;将view的interface给presenter,防止presenter权利过大;Activity实现interface,角色清晰。

缺点:

1.增加了接口文件;

2.增加了更改麻烦,改接口、改presenter、改activity;

应用场景:经常变化的页面,主界面。

三.MVVM

a.简介

MVVM(Model-View-ViewModel):是 MVP 的改进版,MVVM 就是将其中的 View 的状态和行为抽象化,将视图 UI 和业务逻辑分开。

模型层 (Model):负责从各种数据源中获取数据;

视图层 (View):在 Android 中对应于 Activity 和 Fragment,用于展示给用户和处理用户交互,会驱动 ViewModel 从 Model 中获取数据;

ViewModel层:用于将 Model 和 View 进行关联,可以在 View 中通过 ViewModel 从 Model 中获取数据;当获取到了数据之后,会通过自动绑定,比如 DataBinding,来将结果自动刷新到界面上。

由DataBinding:数据绑定来实现。

b.调用关系

image.png

c.实现及依赖关系

image.png

d.优缺点

进步:加入了DataBinging,代码量变小,目前为止一中比较完美的架构。

缺点:XML中有代码。

应用场景:经常变化的页面,主界面。

四.总结

类型

创建过程

A/F

特点

缺点

应用建议

MVC

C->M+V

C

完成了Controller和Model的隔离

Controller变得越来越复杂

简单的、修改少的页面

MVP

V->P->M

V

在MVC的基础上通过Interface彻底分离了View和Model

presenter与View的交互会琐碎和复杂

核心、复杂、需求变化快的页面

MVVM

V->VM->M

V

在MVP的基础上增加了DataBinding,代码量更小

XML中包含代码

核心、复杂、需求变化快的页面