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í)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式