Android MVP + Clean Architecture 深入淺出(譯、學(xué)習(xí))

轉(zhuǎn)載請標(biāo)明出處 http://www.reibang.com/p/e8e81a8f08b1

Github官方地址?


工程作者Jorge J. Barroso (Karumi)

簡述

工程原理基于Clean Architecture.

工程例子基于MVP sample

MVP Sample

MVP

之前的圖浪秘,看下對比欧瘪,Presentation layer 與? Data Layer 之間新增 domain layer? . App 分成三層.

MVP Clean Architecture


MVP:? 是MVP sample里的

Domain:包含業(yè)務(wù)邏輯. Domain layer 的驅(qū)動是Presenter通過use casesinteractor . User case 可以支持所有Developer從Presentation Layer 想執(zhí)行的事情

Use case 通常翻譯成"用例"? 何為Use case?? "是一件事的場景描述"

Repository: 是MVP sample里的

?重點(diǎn)概念

MVP sample最大的區(qū)別是使用Domain layer 和 use cases . 把Domain Layer層從Presenter 移出是幫助避免Presenter存在重復(fù)的domain 代碼(e.g.Task filters).

Use cases 定義了一組App需要的操作.它的Class名稱帶有明顯目的宝与,會提高可讀性(seetasks/domain/usecase/).

Use cases對于我們重復(fù)使用domain代碼是十分有益的.CompleteTask是一個很好的例子梗醇,例如它同時使用了TaskDetailPresenterTasksPresenter.?

通過命令模式command pattern Use cases 在后臺線程完成執(zhí)行.Domain Layer 的存在完全減弱 Android SDK 和 第三方 lib 的依賴.(Java獨(dú)立代碼)

問題/紀(jì)要

Use cases 運(yùn)行在主線程之外,這對Android apps來說是一個好的解決方案. 這樣做盡可能避免堵塞UI線程. 我們決定使用命令模式command pattern來執(zhí)行線程池中的Use cases. 但我們也可以通過RxJava 和 Promises 來實(shí)現(xiàn).

我們使用異步的倉庫(Data Source)但沒有必要一定這樣做. 因?yàn)?Use cases 就已經(jīng)不在主線程執(zhí)行的. 這樣會盡可能的保持原生的例子.

我們建議為View闯捎、Domain椰弊、API層使用不同的Model . 但在這個Case下所有Model都是不變的,因此沒必要重復(fù)創(chuàng)建維護(hù)他們.? 如果View包含Android相關(guān)聯(lián)字段瓤鼻,我們就使用兩種Model . 一個用在Domian Layer 一個用在View Layer ,并且維護(hù)一個mapper去轉(zhuǎn)換彼此.

CallBack(回調(diào)) 相關(guān)存在一個 onError() 方法, 在真正的app中應(yīng)該包含報錯的信息.

測試性

應(yīng)用Clean Architecture思想后

Domain Layer :過單元測試(Unit Test) 可測

也可以通過集成測試來擴(kuò)展秉版,把它覆蓋到從View 到 Repository

三層分離,上層依賴下層茬祷,所以下層永遠(yuǎn)不知道有上層清焕。這三層皆可獨(dú)立測試

依賴

除了依賴一些測試lib , 其他一律不需要

特征

復(fù)雜性 - 可理解性

使用框架/lib/tool? ??? 沒有

概念復(fù)雜性

中等偏下 .? 這還是MVP ,不過是以增加新的 Domain Layer 來處理業(yè)務(wù)邏輯.

代碼量

新增Domain Layer層后,添加了一些class 和代碼量如圖


MVP-Clean-Architecture

可維護(hù)性

易于拓展和新增功能 / 學(xué)習(xí)陳本

非常簡單. 這種方式更加擅長

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末秸妥,一起剝皮案震驚了整個濱河市借卧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌筛峭,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件陪每,死亡現(xiàn)場離奇詭異影晓,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)檩禾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進(jìn)店門挂签,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人盼产,你說我怎么就攤上這事饵婆。” “怎么了戏售?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵侨核,是天一觀的道長。 經(jīng)常有香客問我灌灾,道長搓译,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任锋喜,我火速辦了婚禮些己,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嘿般。我一直安慰自己段标,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布炉奴。 她就那樣靜靜地躺著逼庞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪盆佣。 梳的紋絲不亂的頭發(fā)上往堡,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天,我揣著相機(jī)與錄音共耍,去河邊找鬼虑灰。 笑死,一個胖子當(dāng)著我的面吹牛痹兜,可吹牛的內(nèi)容都是我干的穆咐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼对湃!你這毒婦竟也來了崖叫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤拍柒,失蹤者是張志新(化名)和其女友劉穎心傀,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拆讯,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡脂男,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了种呐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宰翅。...
    茶點(diǎn)故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖爽室,靈堂內(nèi)的尸體忽然破棺而出汁讼,到底是詐尸還是另有隱情,我是刑警寧澤阔墩,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布嘿架,位于F島的核電站,受9級特大地震影響戈擒,放射性物質(zhì)發(fā)生泄漏眶明。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一筐高、第九天 我趴在偏房一處隱蔽的房頂上張望搜囱。 院中可真熱鬧,春花似錦柑土、人聲如沸蜀肘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扮宠。三九已至,卻和暖如春狐榔,著一層夾襖步出監(jiān)牢的瞬間坛增,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工薄腻, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留收捣,地道東北人。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓庵楷,卻偏偏與公主長得像罢艾,于是被迫代替她去往敵國和親楣颠。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評論 2 359

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