Android Clean Mvp

Clean

《Android Clean Mvp》

特点:“洋葱结构”,内层对外层无依赖,不能了解外层结构和业务逻辑,以保证模块的独立性。

  • Entities:是指一款应用的业务对象
  • Use cases:是指结合数据流和实体中的用例,也称为Interactor
  • Interface Adapters: 这一组适配器,是负责以最合理的格式转换用例(use cases)和实体(entities)之间的数据,表现层(Presenters )和控制层(Controllers ),就属于这一块的。
  • Frameworks and Drivers: 这里是所有具体的实现了:比如:UI,工具类,基础框架,等等。

架构的实现方法

《Android Clean Mvp》

表现层 (Presentation Layer)

MVP架构图

《Android Clean Mvp》

View

负责刷新渲染UI,处理建的UI逻辑
fragment和Activity都属于View层

Presenter(主导器)

负责逻辑的处理,持有Model和View实例对象

Model

数据源,可能来自云端,本地存储,内存等等

MVP执行流程

View 调用Presenter ,Presenter调用Model获取数据,Presenter取到数据后刷新View,Presenter中处理业务逻辑,比如表单校验,非空检验,错误判断等等,Model层和View层不打交道

领域层 (Domain Layer)

《Android Clean Mvp》

包含业务对象
仓库接口
UseCase
这里定义的基本上都是接口。这里是很纯粹的Java代码

数据层 (Data Layer)

《Android Clean Mvp》

数据层,可以理解为domain层的实现

Repository(资源库)模式

让领域层感觉不到数据访问层的存在,它提供一个类似集合的接口提供给领域层进行领域对象的访问。Repository是仓库管理员,领域层需要什么东西只需告诉仓库管理员,由仓库管理员把东西拿给它,并不需要知道东西实际放在哪。
Repository模式实际用途:更换、升级ORM引擎更换网络框架,不影响业务逻辑

数据可能来源于本地sdcard,内存,云端。

函数调用链

《Android Clean Mvp》

问题来了.p层调用的是usecase属于domain层,domain层都是接口
接口的实现类是在data中而domain并没有直接调用data中的实现类
domain中如何绑定data中的Repository实现类呢?

Usecase依赖关系

Repository数据源,最终依赖的还是RepositoryImpl
Executor 线程池 (执行任务线程)
PostExecutionThread 调度器(回调线程这里是主线程)
这里实现方式可以通过引用data层创建实例对象
缺点耦合性增强了,domain直接应用了data

Dagger2

这里我们使用的是dagger2进行依赖注入
通过dagger2注入usecase需要的实例对象。
实现domain层代码和data层分离

    原文作者:sunger
    原文地址: https://www.jianshu.com/p/da68720ec8c1
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞