Android 常用的架构主要有 MVC,MVP,MVVM 以及 Clean 。以上架构设计模式没有绝对的优劣之分,关键要看具体的应用场景。

什么是 Clean 架构?

android delete方式 android clean_MVVM

Clean 架构是由 Uncle Bob 在 2012 年发表的, 针对 Web App 的架构设计。

Bob大叔总结了各种系统架构的共通之处以及最终目标,并提出只需秉持分层与依赖规则的原则, 提出了 Clean 架构思想。

Clean 架构浅析

单向依赖

android delete方式 android clean_android delete方式_02

Clean 架构各层之间的依赖是单向的,只能是外层依赖内层。

MVP VS Clean

android delete方式 android clean_MVVM_03

从上图可以看到 Clean 架构的 Android 实现,实际上是对目前比较流行的 MVP 架构进行改造。

MVP 之 View 和 Presenter 层作为 Clean 架构的 Presentations Layer, 新增 Domain Layer 处理所有的业务逻辑。MVP 中的 Model 层功能被弱化,作为 Data Layer 对外只提供接口,不再有业务逻辑。 一般来说每一层都有独立的数据模型。

Clean 之 Presentation 层

包含如下类:

  • Presenter 和 View 层相关类,当然你也可以在 MVVP 架构基础之上进行改造。
  • Mapper 类,负责将 Domain 层的数据模型转换为 Presentation 的数据模型。
  • 本层的异常封装类。

Clean 之 Domain 层

android delete方式 android clean_android delete方式_04

Domain 层不依赖于 Android 类库和第三方库,可以独立做单元测试。

包含如下类:

  • Use Cases (Interactor)类,负责完成对 Data 层的某一操作行为。(如获取 movie list ,获取某一 movie 的 detail info 可视为 2 个 Use Case 或 Interactor)。
  • Mapper 类,负责将 Data 层的数据模型转换为 Domain 层的数据模型。
  • 本层的异常封装类。

Clean 之 Data 层

android delete方式 android clean_Android_05

图片来自 Robert C. Martin (Uncle Bob)

这张图就足够说明一切了。

包含各种 API 接口,主要对应数据库操作,文件操作以及网络数据操作,一些异常封装类。
Mapper 类,负责将网络数据模型转换为 Data 层的数据模型。

注意 Data 层只提供接口,没有业务逻辑。

Android Clean 架构实现

一个基于 Clean 架构以及 Retrofit , RxKotlin , Dagger 框架实现的 Kotlin for Android App 。