瞭解相關更多技術,可參考《我就死磕安卓了,怎麼了?》,接下來談一談咱們來學習一下MVP的基本認識。html
你們對MVC的架構模式再熟悉不過。今天咱們就學習一下MVP架構模式。java
因爲對視圖的渲染放在了Presenter中,因此視圖和Persenter的交互會過於頻繁。android
還有一點你須要明白,若是Presenter過多地渲染了視圖,每每會使得它與特定的視圖的 聯繫過於緊密。一旦視圖須要變動,那麼 Presenter也須要變動了。好比說,本來用來呈現Html的Presenter如今也須要用於呈現Pdf了,那麼視圖頗有可能也須要變動。git
效果圖:github
看起來要複雜的比較多。代碼量也相對比較大。可是若是用到大項目中咱們就能顯示出優點了。接下來進行mvp的封裝。數據庫
時間久了,咱們就會發現mvp會帶來極大的方面:在MVP中,因爲業務邏輯都在Presenter裏,咱們徹底能夠寫一個PresenterTest的實現類繼承Presenter的接口,如今只要在Activity裏把Presenter的建立換成PresenterTest,就能進行單元測試了,測試完再換回來便可。萬一發現還得進行測試,那就再換成PresenterTest吧。服務器
Model層:微信
這一層主要就是負責向數據源(通常爲服務器/數據庫,下同)發起獲取數據請求,而且把獲取的數據或者錯誤信息回調給持有的Presenter。除了發起請求功能外,通常咱們還須要一個取消請求的方法。網絡
因此Model層主要的功能是:架構
Presenter層:
這層主要負責通知Model層向服務器發起請求並接收Model層回調的數據或者錯誤信息,而且這一層還要負責把數據或者錯誤信息處理後回調到View層,由View層負責顯示。 通常在網絡請求中的錯誤信息分爲兩種,一種是網絡設備的網絡狀態錯誤,沒法發送請求;另一種是服務器拒絕了此次請求。因此Presenter的主要功能是:
View層:
在MVP模式中,View層是一個接口。它的首要任務是把Presenter處理後的數據傳到具體的原生控件中顯示,而且控制是否顯示加載進度條。 因此View層的主要功能是:
MVP把Activity中的UI邏輯抽象成View接口,把業務邏輯抽象成Presenter接口,Model類仍是原來的Model。
在MVP模式中Activity的功能就是響應生命週期和顯示界面,具體其餘的工做都丟到了Presenter層中進行完成,Presenter實際上是Model層和View層的橋樑。
項目地址:
https://github.com/androidstarjack/MvpSimpleStudy
服務端測試項目地址:
http://download.csdn.net/download/androidstarjack/9966557
參考連接:
http://www.360doc.com/content/13/0808/13/7427585_305589280.shtml
遺留問題:
總結:過多的追求模式有時候也會拔苗助長,MVC應用有時候也有太多的寬泛。
(歡迎關注學習和交流)
MVP+Dagger2+Retrofit2.0+Rxjava看這一個例子就夠了
微信公衆號:終端研發部
若是您以爲頗有幫助,歡迎隨時撩我。