MVP架構(gòu)在Android平臺(tái)上的實(shí)現(xiàn)分析(三)

上篇文章里,我們對(duì)Google官方的TODO-MVP-Loaders做了分析狞悲,今天繼續(xù)探討另外一種官方實(shí)現(xiàn)撮抓,基于Clean架構(gòu)的MVP實(shí)現(xiàn)。

Clean架構(gòu)摇锋,如果從分層方式來(lái)看丹拯,主要涉及了一種“洋蔥式”的分層設(shè)計(jì),這些層次包括:UI框架層荸恕、Presenter層乖酬、Domain層、Entities層融求。

各層之間是單向的咬像、從外到內(nèi)的依賴關(guān)系,并且越往內(nèi)層,其實(shí)現(xiàn)越不依賴于具體的平臺(tái)框架施掏。更專業(yè)钮惠、更詳細(xì)的說(shuō)明,可直接閱讀Uncle Bob的文章:The Clean Architecture七芭。

這種架構(gòu)的好處有:

1素挽、當(dāng)UI相關(guān)代碼需要修改時(shí),對(duì)其他層不產(chǎn)生影響或者影響很少狸驳;

2预明、業(yè)務(wù)邏輯通過(guò)UseCase或者Interactor類封裝,方便擴(kuò)展維護(hù)耙箍;

3撰糠、可以靈活使用不同的數(shù)據(jù)庫(kù)方案,而不影響其他部分代碼辩昆;

4阅酪、方便單元測(cè)試,提前暴露問(wèn)題汁针。

上述分層方式與MVP的分層架構(gòu)有所不同术辐,但兩者可以結(jié)合起來(lái),發(fā)揮各自的優(yōu)點(diǎn)施无。我們來(lái)看TODO-MVP-Clean是如何實(shí)現(xiàn)的辉词。

這是Google官方網(wǎng)站上,對(duì)應(yīng)TODO-MVP-Clean實(shí)現(xiàn)的一幅圖猾骡。

從上圖可以看出瑞躺,相對(duì)于基礎(chǔ)實(shí)現(xiàn),主要是增加了Domain層兴想,包括與具體業(yè)務(wù)邏輯對(duì)應(yīng)的UseCase及其派生類幢哨。

在官方介紹里面,該實(shí)現(xiàn)從整體上被分為了3層:

Presentation Layer襟企,包括各種View嘱么、Presenter類;

Domain Layer顽悼,包括UseCase及其派生類曼振;

Data Layer,主要包括實(shí)現(xiàn)了TasksDataSource接口的TasksRepository類蔚龙。

其UML靜態(tài)結(jié)構(gòu)圖如下冰评。這里為了簡(jiǎn)潔,只選取了其中保存任務(wù)相關(guān)的靜態(tài)結(jié)構(gòu)進(jìn)行分析木羹,對(duì)于其他諸如獲取任務(wù)甲雅、刪除任務(wù)的結(jié)構(gòu)分析也類似解孙。

以新建任務(wù)時(shí)的保存操作為例,其UML動(dòng)態(tài)序列圖如下抛人。

結(jié)合序列圖弛姜,我們?cè)趨⒖荚搶?shí)現(xiàn)時(shí),可以關(guān)注如下幾點(diǎn)妖枚。

首先是業(yè)務(wù)邏輯相關(guān)調(diào)用廷臼。在Presenter中,原先基礎(chǔ)實(shí)現(xiàn)里面直接調(diào)用TaskRepository對(duì)象的地方绝页,在該實(shí)現(xiàn)中荠商,已經(jīng)改為通過(guò)UseCaseHandler調(diào)用,再由內(nèi)部的UseCaseThreadPoolScheduler調(diào)用SaveTask這個(gè)UseCase的具體實(shí)現(xiàn)续誉,最后通過(guò)TaskRepository的saveTask方法來(lái)完成整個(gè)操作莱没。

其次關(guān)注回調(diào)處理。在SaveTask里面酷鸦,保存成功后饰躲,會(huì)調(diào)用UseCaseHandler中的onSuccess回調(diào)函數(shù),再通過(guò)UseCaseThreadPoolScheduler觸發(fā)AddEditTaskPresenter中的回調(diào)井佑。這里和具體業(yè)務(wù)邏輯相關(guān)的地方属铁,分別在SaveTask眠寿、AddEditTaskPresenter中躬翁。

再次就是Domain層的UseCase里面模板參數(shù)的實(shí)現(xiàn)。還是以保存任務(wù)為例盯拱,在定義SaveTask類時(shí)盒发,需要根據(jù)具體業(yè)務(wù)(例如保存任務(wù)數(shù)據(jù)),專門定義內(nèi)部類狡逢,分別實(shí)現(xiàn)模板參數(shù)中UseCase.RequestValues和UseCase.ResponseValue這兩個(gè)接口宁舰。

另外,UseCaseThreadPoolScheduler里面的線程池設(shè)計(jì)奢浑,用于同時(shí)有多個(gè)UseCase需要執(zhí)行的場(chǎng)景蛮艰。這里還使用了單例模式,上述Scheduler所屬的UseCaseHandler對(duì)象為全局的單例對(duì)象雀彼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末壤蚜,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子徊哑,更是在濱河造成了極大的恐慌袜刷,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件莺丑,死亡現(xiàn)場(chǎng)離奇詭異著蟹,居然都是意外死亡墩蔓,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門萧豆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)奸披,“玉大人,你說(shuō)我怎么就攤上這事涮雷≡茨冢” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵份殿,是天一觀的道長(zhǎng)膜钓。 經(jīng)常有香客問(wèn)我,道長(zhǎng)卿嘲,這世上最難降的妖魔是什么颂斜? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮拾枣,結(jié)果婚禮上沃疮,老公的妹妹穿的比我還像新娘。我一直安慰自己梅肤,他們只是感情好司蔬,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著姨蝴,像睡著了一般俊啼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上左医,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天授帕,我揣著相機(jī)與錄音,去河邊找鬼浮梢。 笑死跛十,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的秕硝。 我是一名探鬼主播芥映,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼远豺!你這毒婦竟也來(lái)了奈偏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤憋飞,失蹤者是張志新(化名)和其女友劉穎霎苗,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體榛做,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡唁盏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年内狸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片厘擂。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡昆淡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出刽严,到底是詐尸還是另有隱情昂灵,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布舞萄,位于F島的核電站眨补,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏倒脓。R本人自食惡果不足惜撑螺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望崎弃。 院中可真熱鬧甘晤,春花似錦、人聲如沸饲做。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)盆均。三九已至塞弊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缀踪,已是汗流浹背居砖。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留驴娃,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓循集,卻偏偏與公主長(zhǎng)得像唇敞,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子咒彤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容