Android Clean 架构浅析
该原创文章首发于微信公众号“字节流动”
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 架构浅析相关推荐
- Android Clean 架构
Clean 一般是指,代码以洋葱的形状依据一定的依赖规则被划分为多层:内层对于外层一无所知.这就意味着依赖只能由外向内. Clean 架构的准则: 架构独立.架构不依赖于一些满载功能的软件库. 可测试 ...
- Android Camera架构浅析
原址 1.Camera成像原理介绍 Camera工作流程图 Camera的成像原理可以简单概括如下: 景物(SCENE)通过镜头(LENS)生成的光学图像投射到图像传感器(Sensor)表面上,然后转 ...
- 一种MVVM风格的Android项目架构浅析
前几天接触公司一Android项目,刚看代码时,不知道这么多层级的代码都是干嘛的,看着有点儿懵.只有清楚了结构和流程,才能够在浩瀚的代码里游刃有余. 先不管局部是什么,从全局上去看才能把一件事情看清楚 ...
- android clean 框架,clean架构
1.clean架构简介 clean架构相信大家早有耳闻,毕竟是Bob大叔的心血之作,最近又把http://five.agency/blog/android/ 几篇关于clean 架构的文章拿出来读读加 ...
- Android应用内社区SDK技术架构浅析
Android应用内社区SDK技术架构浅析 图1为雪球财经自选界面,图2是雪球财经App内的社区,也就是动态页面. 一.以友盟微社区为例 简单来说,友盟的微社区就是一款帮助开发者在应用中快速搭建一个社 ...
- Android开发架构规范
前言 在开发中,一个良好的开发习惯以及一个开发规范可能会让你少走很多弯路,也会一定程度上的提高代码的可读性,可维护性和可拓展性.当随着需求的不断变更,需要维护项目的时候.当随着项目的代码量的提升,需要 ...
- 带你领略Clean架构的魅力,腾讯T3大佬亲自讲解
好像相对于上面那张图更好理解,知道为什么吗?因为字少了好多.哈哈.接下来的内容以及我的开源项目中都是以此为基础来写的.分别来解释下. 表现层 (Presentation Layer) 我们这里的表现层 ...
- Android清洁架构(一)
Android Clean Architecture系列之一--清洁的Android架构 原文链接点我 开始 我们都知道,编写高质量代码非常困难而且复杂.不仅仅要满足需求,还要考虑强壮性.可维护性.可 ...
- RISC-V生态架构浅析(认识RISC-V)
个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 RISC-V 生态架构浅析 前言 RISC-V最近越来越多的出现在科技新闻中,大量的公司加入到RISC-V研究和生产中.在越来越多的 ...
最新文章
- VC/MFC分割字符串(SplitString)返回CStringArray
- ASP.NET 无限级分类实现实例(深度字段)
- 《IBM-PC汇编语言程序设计》(第2版)【沈美明 温冬婵】——第五章——自编解析与答案
- Java8 EnumSet 源码简单分析
- SpringBoot 模版渲染
- from 下拉框多个值提交_Git提交规范
- 学习patch命令打补丁,diff命令制作补丁
- 曾鸣:区块链中没有绝对的“去中心化”
- pycharm配置python第三方库_解决pycharm每次新建项目都要重新安装一些第三方库的问题...
- display:none与visibility:hidden的区别 ,还有html5的新属性hidden
- python bottle 终止返回_关于python的bottle框架跨域请求报错问题的处理
- 潘多拉PandoraBox官网下载地址
- 一文梳理2021年常见消息中间件MQ与RabbitMQ面试题
- 【网页开发】登录注册页面01
- Kaggle账号的注册
- 7-10 哈利·波特的考试
- c++ 可变参数 log 打印函数实现
- html行内样式 修改,HTML的行内样式演示案例
- 2021年Q1微信视频号生态趋势调查报告 | 友望数据
- 面向对象下 abstract关键字(宋红康JAVASE)