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

android开发模式/框架比较分析:从MVC到MVP到MVVM到Clean_第1张图片

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

MVP

android开发模式/框架比较分析:从MVC到MVP到MVVM到Clean_第2张图片

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

MVVM

android开发模式/框架比较分析:从MVC到MVP到MVVM到Clean_第3张图片

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

MVPVM

android开发模式/框架比较分析:从MVC到MVP到MVVM到Clean_第4张图片

  1. 介绍
    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层:服务器数据对应数据模型类
  1. 详细实现

Clean

android开发模式/框架比较分析:从MVC到MVP到MVVM到Clean_第5张图片

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

你可能感兴趣的:(android)