该原创文章首发于微信公众号“字节流动”

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

什么是 Clean 架构?

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

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

Clean 架构浅析

单向依赖

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

MVP VS Clean

从上图可以看到 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 层

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

包含如下类:

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

Clean 之 Data 层

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

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

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

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

Android Clean 架构实现

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

参考

  • https://github.com/googlesamples/android-architecture/tree/todo-mvp-clean/
  • https://fernandocejas.com/2014/09/03/architecting-android-the-clean-way/

联系与交流

微信公众号

个人微信

Android Clean 架构浅析相关推荐

  1. Android Clean 架构

    Clean 一般是指,代码以洋葱的形状依据一定的依赖规则被划分为多层:内层对于外层一无所知.这就意味着依赖只能由外向内. Clean 架构的准则: 架构独立.架构不依赖于一些满载功能的软件库. 可测试 ...

  2. Android Camera架构浅析

    原址 1.Camera成像原理介绍 Camera工作流程图 Camera的成像原理可以简单概括如下: 景物(SCENE)通过镜头(LENS)生成的光学图像投射到图像传感器(Sensor)表面上,然后转 ...

  3. 一种MVVM风格的Android项目架构浅析

    前几天接触公司一Android项目,刚看代码时,不知道这么多层级的代码都是干嘛的,看着有点儿懵.只有清楚了结构和流程,才能够在浩瀚的代码里游刃有余. 先不管局部是什么,从全局上去看才能把一件事情看清楚 ...

  4. android clean 框架,clean架构

    1.clean架构简介 clean架构相信大家早有耳闻,毕竟是Bob大叔的心血之作,最近又把http://five.agency/blog/android/ 几篇关于clean 架构的文章拿出来读读加 ...

  5. Android应用内社区SDK技术架构浅析

    Android应用内社区SDK技术架构浅析 图1为雪球财经自选界面,图2是雪球财经App内的社区,也就是动态页面. 一.以友盟微社区为例 简单来说,友盟的微社区就是一款帮助开发者在应用中快速搭建一个社 ...

  6. Android开发架构规范

    前言 在开发中,一个良好的开发习惯以及一个开发规范可能会让你少走很多弯路,也会一定程度上的提高代码的可读性,可维护性和可拓展性.当随着需求的不断变更,需要维护项目的时候.当随着项目的代码量的提升,需要 ...

  7. 带你领略Clean架构的魅力,腾讯T3大佬亲自讲解

    好像相对于上面那张图更好理解,知道为什么吗?因为字少了好多.哈哈.接下来的内容以及我的开源项目中都是以此为基础来写的.分别来解释下. 表现层 (Presentation Layer) 我们这里的表现层 ...

  8. Android清洁架构(一)

    Android Clean Architecture系列之一--清洁的Android架构 原文链接点我 开始 我们都知道,编写高质量代码非常困难而且复杂.不仅仅要满足需求,还要考虑强壮性.可维护性.可 ...

  9. RISC-V生态架构浅析(认识RISC-V)

    个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 RISC-V 生态架构浅析 前言 RISC-V最近越来越多的出现在科技新闻中,大量的公司加入到RISC-V研究和生产中.在越来越多的 ...

最新文章

  1. VC/MFC分割字符串(SplitString)返回CStringArray
  2. ASP.NET 无限级分类实现实例(深度字段)
  3. 《IBM-PC汇编语言程序设计》(第2版)【沈美明 温冬婵】——第五章——自编解析与答案
  4. Java8 EnumSet 源码简单分析
  5. SpringBoot 模版渲染
  6. from 下拉框多个值提交_Git提交规范
  7. 学习patch命令打补丁,diff命令制作补丁
  8. 曾鸣:区块链中没有绝对的“去中心化”
  9. pycharm配置python第三方库_解决pycharm每次新建项目都要重新安装一些第三方库的问题...
  10. display:none与visibility:hidden的区别 ,还有html5的新属性hidden
  11. python bottle 终止返回_关于python的bottle框架跨域请求报错问题的处理
  12. 潘多拉PandoraBox官网下载地址
  13. 一文梳理2021年常见消息中间件MQ与RabbitMQ面试题
  14. 【网页开发】登录注册页面01
  15. Kaggle账号的注册
  16. 7-10 哈利·波特的考试
  17. c++ 可变参数 log 打印函数实现
  18. html行内样式 修改,HTML的行内样式演示案例
  19. 2021年Q1微信视频号生态趋势调查报告 | 友望数据
  20. 面向对象下 abstract关键字(宋红康JAVASE)

热门文章

  1. okhttp https ip直连设置Host
  2. CNCF 新掌舵人首次亮相中国,KubeCon 2020 云原生峰会网上行
  3. 函数的调用(传值调用和传址调用)
  4. grunt从入门到自定义项目模板
  5. Nim博弈和威佐夫博弈 Return of the Nim
  6. GlobalSign的泛域名SSL证书
  7. 网站使用微信登录接口,所踩的坑...
  8. python客户端软件开发_妙小程python客户端
  9. 【IOS学习之工具学习】sublime text mac(代码编辑器)
  10. C++——LCA例题——Tree(祖孙关系)