目錄
MVP那些事兒(5)……中介者模式與MVP的關(guān)系【知識點(diǎn)】
MVP那些事兒(6)……MVC變身為MVP
MVP那些事兒(7)……Kotlin實(shí)現(xiàn)MVP【知識點(diǎn)】
MVP那些事兒(8)……當(dāng)MVP遇到Lifecycle【知識點(diǎn)】
MVP那些事兒(9)……探究MVP的最佳實(shí)踐
MVP那些事兒(10)……MVVM雙向綁定
MVP那些事兒(11)……基于MVVM的Architecture Components
引言
隨著這幾年移動(dòng)互聯(lián)網(wǎng)的快速發(fā)展,移動(dòng)互聯(lián)網(wǎng)技術(shù)也得到了推動(dòng),輔助架構(gòu)設(shè)計(jì)型的框架和思想層出不窮,從井噴的2015年到現(xiàn)在,開發(fā)者們越來越離不開這些高性能、高效率的工具,而制造這些工具的公司或個(gè)人,也被推到神壇,受猿們的膜拜。與此同時(shí),Google在今年的io大會上發(fā)布了自己的官方框架Architecture Components【譯】,可以說是相當(dāng)?shù)膽?yīng)景了。時(shí)不我待,了解架構(gòu)的知識,并且靈活的應(yīng)用是我們程序員未來必不可少的技能,這系列文章是介紹MVP架構(gòu)的,希望能對閱讀此文的朋友們帶來些收獲。
1、如何實(shí)現(xiàn)一個(gè)MVP框架的基本原則,以及MVP的使用場景,是我想寫這篇文章的初衷,同時(shí)也是對我自己學(xué)習(xí)的知識做一個(gè)總體的融合。
2、為了避免一上來生硬的開場,我先以一個(gè)簡單的開發(fā)例子作為引子,以初學(xué)者的角度去看待問題,同時(shí)也能兼顧到初學(xué)者,到后面我們會一步步提示。所以你也可以選擇直接跳轉(zhuǎn)到。。。。
3、因?yàn)橹v架構(gòu),多是場景描述,所以代碼量比較少,習(xí)慣于通過代碼理解的同學(xué),我盡量多些并反復(fù)描述。
場景
假設(shè)實(shí)現(xiàn)一個(gè)商品的列表展示功能,我們首先需要一個(gè)用戶界面,包含一些控件來供用戶操作,比如列表展示。我們大多數(shù)情況下使用一個(gè)Fragment作為控件的載體,在Fragment中直接調(diào)用網(wǎng)絡(luò)請求的工具并等待回調(diào)方法被執(zhí)行后去刷新UI去展示數(shù)據(jù),所以對于這個(gè)需求的代碼量并不是很多?,F(xiàn)在需求增加了,要加入下拉刷新和上拉加載更多,一般是監(jiān)聽這兩個(gè)事件,在相應(yīng)的回調(diào)中處理數(shù)據(jù),沒幾行代碼,依舊寫在Fragment中,而需求又一次增加了,要加入排序,緊接著我們處理排序邏輯,代碼依舊寫在Fragment中,接著又增加需求了,加入詳情頁的跳轉(zhuǎn),可能跳轉(zhuǎn)前要處理些業(yè)務(wù)邏輯,接著又要增加需求了,列表視圖可以從宮格式轉(zhuǎn)變?yōu)槠俨际剑枰淖兛丶臉邮?,……接著新需求又來了,可編輯的列表?xiàng),可以刪除和修改列表項(xiàng),同時(shí)數(shù)據(jù)要同步到服務(wù)器,需求又來了,編輯列表項(xiàng)需要?jiǎng)赢嫻δ堋钡竭@個(gè)時(shí)候我們回頭再看看我們的Fragment,這個(gè)時(shí)候我們可能無法容忍Fragment里混亂復(fù)雜的邏輯了。
從功能性需求的角度來說,功能完整、軟件正常運(yùn)行,這是沒有問題的,但回過頭來我看了一下代碼覺的并不是那么“沒問題”,在不使用架構(gòu)的情況下,我們無感知的將邏輯代碼業(yè)務(wù)以及視圖代碼都堆積到了Activity當(dāng)中,這樣的角色可以說是相當(dāng)?shù)挠纺[的,同時(shí)非常不利于未來的擴(kuò)展,于是非功能性的需求需要滿足:Activity優(yōu)化與擴(kuò)展性。
我們再梳理一下這個(gè)場景的需求列表:
1、列表展示
2、列表支持下拉刷新,上拉加載更多
3、列表要可以排序,可能會有n個(gè)條件
4、列表的item點(diǎn)擊跳轉(zhuǎn)到詳情頁面
5、列表展示需要多樣化,瀑布流變宮格
6、列表可編輯,也許包括CURD,同時(shí)要同步服務(wù)器
7、編輯列表時(shí),加上動(dòng)畫效果
下一章節(jié),我們首先使用加入架構(gòu)的方式來處理上面的需求,其中會介紹Model的定義,Controller的職責(zé),以及它們?nèi)绾瓮ㄟ^控制反轉(zhuǎn)來進(jìn)行解耦,如果你對MVC有了足夠的了解,可以直接跳轉(zhuǎn)到MVP的章節(jié)。