Todo‑mvp‑clean 原始碼體驗

Cang_Wang發表於2019-02-27

大家好,我是蒼王。

以下是我這個系列的相關文章,有興趣可以參考一下,可以給個喜歡或者關注我的文章。

[Android]如何做一個崩潰率少於千分之三噶應用app–章節列表

相信有關注我的人,都會看過我第一編介紹的Todo-mvp原始碼體驗,這是基礎編。

這個系列的課程適合研發有Android有一年半左右的同學參考。

這一節是要介紹含有域名層的MVP架構 todo-mvp-clean

Todo‑mvp‑clean 原始碼體驗
Todo-mvp-clean

我們可以看到它比基本的MVP架構其中新增了一層新的Domain Layer層。

其包裝都是通過一個個UseCase來完成V層和M層的互動的。

一.檔案目錄

我們看看基礎的檔案目錄的不同,其新增了一個domain的一個目錄,裡面有usecase的目錄,用於對Task的操作。

Todo‑mvp‑clean 原始碼體驗

而tasks的目錄裡面保持的其他操作,

Task儲存的是基本的任務資訊類,都是以Task基本物件來傳遞任務。

filter就是建立對符合要求的Task任務的過濾,包括完成任務的過濾和進行中的任務。

usecase裡面就是一些公用的任務類。

Todo‑mvp‑clean 原始碼體驗

最主要的核心就是程式碼

每個XXXTask的任務都需要繼承於UseCase

UseCaseHandler完成每個任務的排程和回撥方法。

當然需要做成非同步任務的,所以我們需要建立執行緒池,UseCaseThreadPoolScheduler就是自定義的執行緒池排程類

Todo‑mvp‑clean 原始碼體驗

二.事件排程流程

我在其他資料裡找到clean架構一個deleteTask的一個時序圖,其基本的流程都是一致,我就省點功夫。

這裡使用了一種註明的設計模式,到最後會告訴大家。。。

Todo‑mvp‑clean 原始碼體驗
cleanTask時序圖

基本分析一下UseCase

其中泛型需要使用RequestValues和ResponseValue時要注意,然後其裡面有UseCallBack的回撥介面,並提供Get和Set的方法,而run的方法需要呼叫抽象excuteUseCase的方法,需要父類實現。

Todo‑mvp‑clean 原始碼體驗

然後DeleteTask裡面可以看到有一些MVP架構的taskRepository的操作,覆寫了excuteUseCase方法,然後還需要繼承RequestValues和ResponseValue建立兩個靜態的類

Todo‑mvp‑clean 原始碼體驗

然後InJection.java裡面提供了一堆的useCase的物件的靜態方法provideXXX

Todo‑mvp‑clean 原始碼體驗

我們檢視TaskDetailPresenter.java裡面的deleteTask的方法

使用了mUseCaseHandler.excute的方法

Todo‑mvp‑clean 原始碼體驗

mUseCaseHandler的物件也是由上面Injection的provideXXX的方法提供

Todo‑mvp‑clean 原始碼體驗

其中UseCaseHandler的excute的方法使用了需要輸入三個引數,一個是useCase,一個是requestValue,另一個是回撥callback。

通過UseCaseScheduler的excute的方法,再嵌入useCase的runnable呼叫。

Todo‑mvp‑clean 原始碼體驗

通過useCase.run會呼叫回DeleteTask.excuteUseCase的方法,然後呼叫getUseCaseCallBack的方法獲取回UseCaseCallback

Todo‑mvp‑clean 原始碼體驗

然後通過onSuccess的回撥獲取response的資料來作出操作

Todo‑mvp‑clean 原始碼體驗

到這裡流程已經講了一遍,如果不清楚流程可以研究一下,一開始的時序圖。

不知道大家是否知道這裡Clean架構運用了一種設計方式?

這裡其用了命令模式,通過對不同命令封裝統一的excute的方式來替換,關於命令模式大家可以檢視一下HeadFirst-設計模式。

三.總結

1.Clean架構的優勢,在於其通過任務委託給一個統一的Handler來執行運算元據的任務,並且其可以封裝各種形式命令來達到資料操作的效果

2.通過命令類的封裝,其簡化了Presenter裡面的邏輯。

3.其可以使用執行緒池機制通過快取策略。

這一期就到這裡了。

我建立了一個關於Android架構學習的群,裡面可以進一步進行元件化學習和架構思想的的交流。

Todo‑mvp‑clean 原始碼體驗

相關文章