开发模式对比分析

MVCMVPMVVMMVPVMClean
修改34555
新增35455
复用34445
单元测试34554
UI测试44444
学习成本34555
代码复杂度34555
实现复杂度13245
代码量13245
可读性24144
可维护性13245
优点开发简单模型视图分离,逻辑清晰双向绑定,简洁清晰逻辑清晰,耦合度低耦合度极低
缺点业务增加后,不易维护抽象接口较多可读性较差,出现问题不易定位实现业务复杂度高业务实现复杂读极高
适用场景极小型项目中大型项目中大型项目大型项目超大型项目

模式详解

MVC

MVC

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

MVP

MVP

  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. 详解参考

MVVM

MVVM

  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

在这里插入图片描述

  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

在这里插入图片描述

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

更多推荐