我的MVP架構(gòu)的學(xué)習(xí)之旅

  • 閱讀本文大概需要4min

關(guān)鍵字


Architecture、MVPThe Clean Code

MVP hello World

前言


本文是本人對于Android MVP的架構(gòu)的學(xué)習(xí)過程以及思考,沒有具體的代碼例子,不過我相信你看了肯定會有收獲的。

思考


AndroidMVP的設(shè)計(jì)架構(gòu)從接觸到現(xiàn)在已經(jīng)快有兩年了,這些年一直與自己的糟糕的代碼打交道,
從不規(guī)范的MVC——把大多數(shù)業(yè)務(wù)邏輯和界面展示寫在Fragement/Activity里
到不規(guī)范的MVP——把數(shù)據(jù)與邏輯處理(M與P),以及邏輯處理與界面(P與V)代碼區(qū)分的不清晰。
關(guān)于學(xué)習(xí)MVP的教程,百度Google一搜一大把,但是很多都是互相摘抄甚至是誤導(dǎo)性錯(cuò)誤理解。以下我將從MVP的介紹,MVP資料學(xué)習(xí),MVP的思考三個(gè)方面進(jìn)行總結(jié),講的不好歡迎交流想法、拍磚。

MVP介紹


M-V-P,分別是Model(數(shù)據(jù)管理層,包括遠(yuǎn)程服務(wù)器與本地緩存以及本地?cái)?shù)據(jù)庫等),Presenter(業(yè)務(wù)處理層,View與Model交互中介的身份,負(fù)責(zé)根據(jù)View中用戶的交互來控制Model對數(shù)據(jù)的處理,然后展示到View中去),View(視圖的展示層,只有有關(guān)界面操作的方法,不直接和Model交互)
典型的架構(gòu)圖

圖片1來自Google Sample

還有最早 uncle bob這里提出的The Clean Architecture
圖片2來自Google Sample

兩者的差別,從圖片上可以很直觀的看到圖片2在圖片1的基礎(chǔ)上多加了Domain Layer,在這一層主要職責(zé)就是對數(shù)據(jù)進(jìn)行增刪改查的一些操作,在這里很方便寫測試用例,可以說圖2是圖1的升級版了。

MVP資料學(xué)習(xí)


  • 最直接的資料當(dāng)然是Google官方提供的Demo了, android-architecture里面包含了基本的MVP架構(gòu),The Clean MVP 以及搭配流行框架RxJva 和Dragger2的各種版本,還有MVVM設(shè)計(jì)架構(gòu)以及與MVP一樣搭配流行框架的不同版本。最初的概念入門可以參考demo,避免走入誤區(qū)。

  • 要想在項(xiàng)目中更真實(shí)的去接觸,同時(shí)手上又沒有可以入手的項(xiàng)目,學(xué)習(xí)別人的Sample是最好的方式。關(guān)于MVP架構(gòu)的學(xué)習(xí),比較流行的都會搭配一些流行框架,這樣就免不了要學(xué)習(xí)Dragger 、RxJva、RxBus(也可以用RxJava實(shí)現(xiàn))等一些流行框架的學(xué)習(xí),你可以先簡單了解一些這些開源庫,然后在學(xué)習(xí)Demo遇到問題有針對性的學(xué)習(xí),關(guān)于Sample的選擇,我有幾個(gè)親測還不錯(cuò)的。

    • https://github.com/esoxjem/MovieGuide 這個(gè)Demo很簡單,只有 列表展示和詳情顯示,代碼采用The Clean MVP,包含Dragger2、RxJava,對于基本了解了Dragger2 和RxJva可以先參照這個(gè)例子
      Tips:例子的運(yùn)行需要去這個(gè)地址去注冊,然后申請API_KEY,最后按照README簡單配置就可以了。

    • https://github.com/Rukey7/MvpApp這是一個(gè)比較完整的項(xiàng)目,代碼量比較大,包含新聞,圖片,視頻。包含了Dragger2、RxJava,生命周期管理rxlifecycle,Tinker熱修復(fù),視頻播放ijkPlayer,內(nèi)存泄漏檢查leakcanary等一些開源庫,該Sample適合想把開源庫結(jié)合到具體項(xiàng)目很有幫助

    • https://github.com/JessYanCoding/MVPArms一個(gè)你可以直接引入自己具體項(xiàng)目的MVP框架,作者對該框架進(jìn)行了比較友好的封裝,包括代碼模板的快捷鍵,Token等一些公共變量,調(diào)試信息輸出及錯(cuò)誤的捕獲,可以滿足中小型項(xiàng)目的開發(fā)。這個(gè)框架的代碼量也不少,設(shè)計(jì)上也不簡單,需要花點(diǎn)時(shí)間學(xué)習(xí)。

MVP的思考


有關(guān)思考,我總結(jié)了兩點(diǎn)

  1. 保證V不存在數(shù)據(jù)的全局變量
  2. 點(diǎn)擊事件的處理放在P里,不要放在Adapter或者Fragment的V里面
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,030評論 25 709
  • 附上原文作者連接:作者:金誠 一.榜單介紹 排行榜包括四大類: 單一框架:僅提供路由、網(wǎng)絡(luò)層、UI層、通信層或其他...
    這個(gè)美嘉不姓陳閱讀 2,328評論 1 35
  • 框架:提供一定能力的小段程序 http://www.cnblogs.com/jincheng-yangchaofa...
    姑娘請別為難小僧閱讀 7,932評論 0 132
  • 世上不只有熊孩子,也有熊父母。離婚了還不善罷甘休。 關(guān)鍵我還放不下,丟不掉,有時(shí)真想一了白了。
    紅茉和萊玲閱讀 300評論 0 0
  • 阿拉伯之夜 阿布扎比清真寺的 皇家密室里 投下一束清冷的月光 透過頂部的窗戶 照在年青的 阿夏拉公主身上 美貌驚人...
    一葉茶閱讀 237評論 0 2

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