android开发模式/框架比较分析:从MVC到MVP到MVVM到Clean
·
开发模式对比分析
| MVC | MVP | MVVM | MVPVM | Clean | |
|---|---|---|---|---|---|
| 修改 | 3 | 4 | 5 | 5 | 5 |
| 新增 | 3 | 5 | 4 | 5 | 5 |
| 复用 | 3 | 4 | 4 | 4 | 5 |
| 单元测试 | 3 | 4 | 5 | 5 | 4 |
| UI测试 | 4 | 4 | 4 | 4 | 4 |
| 学习成本 | 3 | 4 | 5 | 5 | 5 |
| 代码复杂度 | 3 | 4 | 5 | 5 | 5 |
| 实现复杂度 | 1 | 3 | 2 | 4 | 5 |
| 代码量 | 1 | 3 | 2 | 4 | 5 |
| 可读性 | 2 | 4 | 1 | 4 | 4 |
| 可维护性 | 1 | 3 | 2 | 4 | 5 |
| 优点 | 开发简单 | 模型视图分离,逻辑清晰 | 双向绑定,简洁清晰 | 逻辑清晰,耦合度低 | 耦合度极低 |
| 缺点 | 业务增加后,不易维护 | 抽象接口较多 | 可读性较差,出现问题不易定位 | 实现业务复杂度高 | 业务实现复杂读极高 |
| 适用场景 | 极小型项目 | 中大型项目 | 中大型项目 | 大型项目 | 超大型项目 |
模式详解
MVC

- 介绍
MVC=Model+View+Controller
- Model:数据模型层,主要负责数据的获取
- View:视图层,页面的显示,即xml
- Controller:控制器,业务逻辑的核心控制,即activity/fragment
- 详细实现
- 略
- 详解参考
MVP

- 介绍
MVP=Model+View+Presenter,比起MVC,MVP将View和Model解耦,从而降低了耦合度
- Model:数据模型层,主要负责数据的获取
- View:视图层,页面的显示,即xml+activity/fragment
- Presenter:控制器,业务逻辑的核心控制
- 详细实现
github代码地址 ,我们拿该项目中的taskDetail来举例分析说明
- TaskDetailContract:view和presenter的抽象接口层,两个接口合在一起写,方便实现和管理,是解决mvp中接口过多的一种方式
- TaskDetailFragment:view的实现层,实现了TaskDetailContract中view的抽象接口
- TaskDetailPresenter:presenter的实现层,实现了TaskDetailContract中presenter的抽象接口
- TaskDetailModule:依赖关系定义层,定义了依赖注入中的依赖关系
- 扩展封装
MvpDaggerArch架构使用文档 - 详解参考
MVVM

- 介绍
MVVM=Model+View+ViewModel,比起MVP,MVVM充分利用xml,将逻辑层(Presenter/ViewModel)和View层的单向绑定改为了双向绑定,耦合度和MVP差不多,类比MVP少,可用性更强
- Model:数据模型层,主要负责数据的获取
- View:视图层,页面的显示,即xml+activity/fragment
- ViewModel:控制器,业务逻辑的核心控制
- 详细实现
github代码地址 ,我们仍然拿TaskDetail来举例分析
- taskdetail_frag.xml: View层
- TaskDetailViewModel: ViewModel层
- TaskDetailFragment: 对View和ViewModel进行初始化
MVPVM

- 介绍
MVPVM=Model+View+Presenter+ViewModel
在没有使用类似MVP架构的时候,逻辑一般都直接写在了Activity或者Fragment里,导致View层很臃肿,业务逻辑、UI操作和数据耦合到了一起,结构混乱。现在,View层要处理的逻辑全部委托给Presenter处理,View层专注实现UI,Presenter专注实现业务逻辑,它们之间通过View Interface和Presenter Interface交互。在google推出databinding后,View Interface的部分功能可以转移到ViewModel中去,进一步降低View层的臃肿。
- View层:实现View Interface,对外提供showDialog、showToast之类的方法
- ViewModel层:以databinding为基础,对外提供控制xml界面的方法
- Presenter层:实现Presenter Interface,处理业务逻辑
- Model层:服务器数据对应数据模型类
- 详细实现
- 略
Clean

- 介绍
Clean 一般是指,代码以洋葱的形状依据一定的依赖规则被划分为多层:内层对于外层一无所知。这就意味着依赖只能由外向内。 - 详细实现
github代码地址 ,该项目主要分为以下几个模块
- domain:抽象业务层
- data:数据层
- presentation:展示层
- 详解参考
更多推荐


所有评论(0)