博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Todo‑mvp‑clean 源码体验
阅读量:6032 次
发布时间:2019-06-20

本文共 1627 字,大约阅读时间需要 5 分钟。

大家好,我是苍王。

以下是我这个系列的相关文章,有兴趣可以参考一下,可以给个喜欢或者关注我的文章。

相信有关注我的人,都会看过我第一编介绍的,这是基础编。

这个系列的课程适合研发有Android有一年半左右的同学参考。

这一节是要介绍含有域名层的MVP架构 todo-mvp-clean

Todo-mvp-clean

我们可以看到它比基本的MVP架构其中添加了一层新的Domain Layer层。

其包装都是通过一个个UseCase来完成V层和M层的交互的。

一.文件目录

我们看看基础的文件目录的不同,其添加了一个domain的一个目录,里面有usecase的目录,用于对Task的操作。

而tasks的目录里面保持的其他操作,

Task保存的是基本的任务信息类,都是以Task基本对象来传递任务。

filter就是创建对符合要求的Task任务的过滤,包括完成任务的过滤和进行中的任务。

usecase里面就是一些公用的任务类。

最主要的核心就是代码

每个XXXTask的任务都需要继承于UseCase

UseCaseHandler完成每个任务的调度和回调方法。

当然需要做成异步任务的,所以我们需要创建线程池,UseCaseThreadPoolScheduler就是自定义的线程池调度类

二.事件调度流程

我在其他资料里找到clean架构一个deleteTask的一个时序图,其基本的流程都是一致,我就省点功夫。

这里使用了一种注明的设计模式,到最后会告诉大家。。。

cleanTask时序图

基本分析一下UseCase

其中泛型需要使用RequestValues和ResponseValue时要注意,然后其里面有UseCallBack的回调接口,并提供Get和Set的方法,而run的方法需要调用抽象excuteUseCase的方法,需要父类实现。

然后DeleteTask里面可以看到有一些MVP架构的taskRepository的操作,覆写了excuteUseCase方法,然后还需要继承RequestValues和ResponseValue创建两个静态的类

然后InJection.java里面提供了一堆的useCase的对象的静态方法provideXXX

我们查看TaskDetailPresenter.java里面的deleteTask的方法

使用了mUseCaseHandler.excute的方法

mUseCaseHandler的对象也是由上面Injection的provideXXX的方法提供

其中UseCaseHandler的excute的方法使用了需要输入三个参数,一个是useCase,一个是requestValue,另一个是回调callback。

通过UseCaseScheduler的excute的方法,再嵌入useCase的runnable调用。

通过useCase.run会调用回DeleteTask.excuteUseCase的方法,然后调用getUseCaseCallBack的方法获取回UseCaseCallback

然后通过onSuccess的回调获取response的数据来作出操作

到这里流程已经讲了一遍,如果不清楚流程可以研究一下,一开始的时序图。

不知道大家是否知道这里Clean架构运用了一种设计方式?

这里其用了命令模式,通过对不同命令封装统一的excute的方式来替换,关于命令模式大家可以查看一下HeadFirst-设计模式。

三.总结

1.Clean架构的优势,在于其通过任务委托给一个统一的Handler来运行操作数据的任务,并且其可以封装各种形式命令来达到数据操作的效果

2.通过命令类的封装,其简化了Presenter里面的逻辑。

3.其可以使用线程池机制通过缓存策略。

这一期就到这里了。

我建立了一个关于Android架构学习的群,里面可以进一步进行组件化学习和架构思想的的交流。

转载地址:http://xodhx.baihongyu.com/

你可能感兴趣的文章
用DFS实现全排列 & 八皇后问题
查看>>
深度学习博客
查看>>
Android总结篇系列:Android Service
查看>>
Android dumpsys命令的使用
查看>>
Linux Kernel系列一:开篇和Kernel启动概要
查看>>
BZOJ 2756: [SCOI2012]奇怪的游戏 网络流/二分
查看>>
master + worker模式的node多核解决框架——node-cluster
查看>>
Android如何实现超级棒的沉浸式体验
查看>>
使用node打造自己的命令行工具方法教程
查看>>
Express代理中间件问题与解决方案
查看>>
||和&&返回什么?
查看>>
linux在文件中查找指定字符串,然后根据查找结果来做进一步的处理
查看>>
在Oracle中删除所有强制性外键约束
查看>>
dhcp
查看>>
【R】R语言使用命令行参数 - [编程技巧(Program Skill)]
查看>>
经典算法题每日演练——第二题 五家共井
查看>>
存储过程中拼接的变量和点的问题
查看>>
ASP.NET那点不为人知的事(一)
查看>>
Windows Phone 独立存储查看器
查看>>
js与php转换时间戳
查看>>