Android 架构设计比较分析
MVC、MVP和MVVM是常见的Android三种架构设计,随着时间的推移,MVC使用率逐渐下降,MVP和MVVM的使用相对比较广泛一些,还是那句话:没有最好的架构,只有最适合的架构。
一.MVC
a.简介
MVC (Model-View-Controller, 模型-视图-控制器):
模型层 (Model):业务逻辑对应的数据模型,与View无关,而与业务相关;
视图层 (View):一般使用XML或者Java对界面进行描述;
控制层 (Controller):在Android中通常指Activity和Fragment,或者由其控制的业务类。
b.调用关系
image.pngc.实现及依赖关系
image.pngd.优缺点
进步:完成了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.pngc.实现及依赖关系
image.pngd.优缺点
进步:完成了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.pngc.实现及依赖关系
image.pngd.优缺点
进步:加入了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中包含代码 | 核心、复杂、需求变化快的页面 |