MVP模式入門(結(jié)合Rxjava,Retrofit)
本文MVP的sample實(shí)現(xiàn)效果:
github地址:https://github.com/xurui1995/MvpSample
老規(guī)矩,在說對(duì)MVP模式的理解之前還是要再談?wù)凪VC模式,了解了MVC的缺點(diǎn)。我們才知道為什么要用MVP。
關(guān)于MVC的圖解,我在網(wǎng)上找到了一些圖。如下:
MVC模式在開發(fā)web或者管理系統(tǒng)中應(yīng)用很多,我們的View與人交互,人點(diǎn)擊鼠標(biāo)或者輸入一些東西時(shí),View會(huì)發(fā)送相應(yīng)的指令給Controller,Controller接到指令,再去調(diào)用Model的方法去更新數(shù)據(jù)(大多是對(duì)數(shù)據(jù)的增刪改查),Model處理完,View刷新顯示。
MVC模式的缺點(diǎn):
1:在android中,如果我們要用mvc模式,那么每層代表什么呢?
你可能會(huì)說:View對(duì)應(yīng)android的layout.xml,Model對(duì)應(yīng)android中對(duì)數(shù)據(jù)庫(kù)的操作對(duì)網(wǎng)絡(luò)等操作放在這里進(jìn)行,Controller對(duì)應(yīng)的則是Activity!
你說的都對(duì),但是你不覺得這樣的對(duì)應(yīng)關(guān)系并不好嗎,如果layout.xml對(duì)應(yīng)View,那如果我們想動(dòng)態(tài)的控制添加一些視圖控件或者改變背景,那么該怎么辦呢?
答曰:在Activity中添加代碼。!!!這就是缺點(diǎn)之一所在:Activity既當(dāng)?shù)╒iew)又當(dāng)媽(Controller),layout.xml代表的View層控制能力太弱。
2:再看一遍我們的MVC的結(jié)構(gòu)圖,View和Model是互相聯(lián)系的,存在耦合關(guān)系,這就給測(cè)試維護(hù)帶來了難度。當(dāng)我們想更換項(xiàng)目中的某個(gè)零件時(shí),缺發(fā)現(xiàn) 太難拆下來!這個(gè)零件類的方法散布多處。關(guān)于MVC的結(jié)構(gòu)圖,忘了在哪聽過一句經(jīng)典的話,寫三個(gè)字母,M,V,C,隨便用線或箭頭連字母,最后就是MVC的結(jié)構(gòu)圖。
說完了MVC,該主角登場(chǎng)了,上我們MVP的結(jié)構(gòu)圖。
好處不言而喻,View和Model無法通信了。
View層只負(fù)責(zé)與View有關(guān)的,操作View層時(shí)發(fā)出的事件傳遞給Presenter,Presenter去操作Model,操作完Model,再去通知View相應(yīng)更新。
關(guān)于MVP的更多概念:
延伸閱讀
學(xué)習(xí)是年輕人改變自己的最好方式