MVP GoogleSample——todo App(二)

筆記: 昨天弄清楚 項目的架構(gòu),今天來看看具體細節(jié)是怎么實現(xiàn)的吧。

我們以“添加一個新的任務(wù)” 這個動作,作為我們研究的主線流程。

APP 上的我們要執(zhí)行的操作是:點擊 floatButton添加 → ?輸入 task 名稱 ?→ ?點擊 floatbutton 完成。所以首先我們找到 floatButton 的 onClick()

floatButton 點擊監(jiān)聽

可以看到,作為 view 的 TasksFragment 持有了一個作為 presenter 的對象,在用戶進行點擊操作的時候 直接調(diào)用 presenter 的方法,將用戶的 UI 事件轉(zhuǎn)換成了具體的邏輯任務(wù)。然后我們跟隨事件,來到 presenter 中看看下面的操作。(注:這里為了解耦 presenter 具體類對象是實現(xiàn)了 presenter 的操作接口)

Presenter 定義

我們在 TaskActivity 中找到了 傳入的 presenter 實現(xiàn)類 ——TasksPresenter?

兩個重點

1、TasksPresenter 實現(xiàn)了 TasksContract.Presenter 接口 用于實現(xiàn)TasksPresenter 與 Fragment 的解耦。

2、通過 TaskView 接口的方法 使Fragment 持有了它本身(this)對象。

下面我們找到 addnewTask()方法

addnewtask

看到.....額.....通過 mTasksView 的接口方法又回調(diào)給了 view層 (當(dāng)前的 view 層 就是 TasksFragment),好吧 我們再回去。(其實如果 app 復(fù)雜一些在這里會執(zhí)行一些操作,比如獲取未編輯完成的 task,或者加載一些個性化的東西 )

找到 showAddTask()方法 看到,在這里跳轉(zhuǎn)到了一個新的 activity 中來執(zhí)行對這個新 task 的編輯操作。好像 intent 也沒有帶什么數(shù)據(jù)過去。就這么直接去了...

AddEditTaskActivity

AddEditTaskActivity 與 TasksActivity 很類似。 這里出現(xiàn)了另一個 MVP 結(jié)構(gòu)單元?

Injection.provideTasksRepository ? —— ? AddEditTaskFragment ? —— AddEditTaskPresenter

我們執(zhí)行的動作 也只有一個,就是 點擊 floatbutton 來保存我們新創(chuàng)建的 task

還是找到 floatbutton 的 onClick 監(jiān)聽

執(zhí)行了 presenter 的 saveTask 操作 并傳入了 兩個 Title 與 description 兩個 String 參數(shù)。

saveTask()

saveTask 的具體操作: 首先檢查是否是新建任務(wù)?

isNewTask()

咦? 這 mTaskId 是什么鬼? ?哈哈,我們回去 AddEditTaskActivity 中看看 Presenter 的定義部分

記得我們前面說了 , 在執(zhí)行跳轉(zhuǎn)的 Intent 什么都沒有傳過來,所以當(dāng)我們在創(chuàng)建一個新的 task 時 這個 taskId 一定是空的。那么接下來就會執(zhí)行 creatTask()了

如果新創(chuàng)建的 task 是有效的 首先通過 TasksRepository 來將 task 保存到數(shù)據(jù)中,這里是 presenter 對 model 進行了調(diào)用操作 并且是由 presenter 持有 model 的對象。

saveTask()

saveTask 的操作 ,分別 ?task 保存到 遠端 ?本地 以及 ?緩存中。保存完成后 執(zhí)行了AddTaskView 接口的 showTaskList 操作 通知 UI(當(dāng)前的 view 是 AddEditTaskFragment)進行先一步操作

返回上一步
將結(jié)果交給 presenter 處理
處理完成通知 view?

好,一整套添加新 task 的流程走完。我們總結(jié)一下 各部分的職責(zé)吧

架構(gòu)圖

首先 ? view 層 與 presenter 層 是相互持有,這樣來達到交流的作用,view 層負責(zé)接收和展示。

然后 presenter 層與 Respository層(或者 Model)為單向持有,就是說只能是由 presenter 來控制從 model 層得到什么,或者給 model 層什么,而 model 只能服從。presenter 來負責(zé)怎么處理問題。

而 model 層就是執(zhí)行者,處理有 persenter 將問題細化后的各項任務(wù),并通過回調(diào) 來告知 presenter 執(zhí)行結(jié)果。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容