摘要:前言了解相關更多技術,可參考我就死磕安卓了,怎么了,接下來談一談我們來學習一下的基本認識。所以層主要的功能是向數據源發起請求取消該請求通知處理結果。
前言
了解相關更多技術,可參考《我就死磕安卓了,怎么了?》,接下來談一談我們來學習一下MVP的基本認識。
大家對MVC的架構模式再熟悉不過。今天我們就學習一下MVP架構模式。
MVC和MVP之間的對比 什么是MVP(Model View Presenter)模式?1、為了使得視圖接口可以與模型和控制器進行交互,控制器執行一些初始化事件
2、用戶通過視圖(用戶接口)執行一些操作
3、控制器處理用戶行為(可以用觀察著模式實現)并通知模型進行更新
4、模型引發一些事件,以便將改變發告知視圖
5、視圖處理模型變更的事件,然后顯示新的模型數據
6、用戶接口等待用戶的進一步操作
MVP的優勢1、模型與視圖完全分離,我們可以修改視圖而不影響模型
2、可以更高效地使用模型,因為所以的交互都發生在一個地方——Presenter內部
3、我們可以將一個Presener用于多個視圖,而不需要改變Presenter的邏輯。這個特性非常的有用,因為視圖的變化總是比模型的變化頻繁。
4、如果我們把邏輯放在Presenter中,那么我們就可以脫離用戶接口來測試這些邏輯(單元測試)
MVP的問題由于對視圖的渲染放在了Presenter中,所以視圖和Persenter的交互會過于頻繁。
還有一點你需要明白,如果Presenter過多地渲染了視圖,往往會使得它與特定的視圖的 聯系過于緊密。一旦視圖需要變更,那么 Presenter也需要變更了。比如說,原本用來呈現Html的Presenter現在也需要用于呈現Pdf了,那么視圖很有可能也需要變更。
一個簡單的登陸實例效果圖:
目錄結構![服務器對岸用例測試LoginService
](http://upload-images.jianshu....
看起來要復雜的比較多。代碼量也相對比較大。但是如果用到大項目中我們就能顯示出優勢了。接下來進行mvp的封裝。
時間久了,我們就會發現mvp會帶來極大的方面:在MVP中,由于業務邏輯都在Presenter里,我們完全可以寫一個PresenterTest的實現類繼承Presenter的接口,現在只要在Activity里把Presenter的創建換成PresenterTest,就能進行單元測試了,測試完再換回來即可。萬一發現還得進行測試,那就再換成PresenterTest吧。
總結Model層:
這一層主要就是負責向數據源(一般為服務器/數據庫,下同)發起獲取數據請求,并且把獲取的數據或者錯誤信息回調給持有的Presenter。除了發起請求功能外,一般我們還需要一個取消請求的方法。
所以Model層主要的功能是:
向數據源發起請求;
取消該請求;
通知Presenter處理結果。
Presenter層:
這層主要負責通知Model層向服務器發起請求并接收Model層回調的數據或者錯誤信息,并且這一層還要負責把數據或者錯誤信息處理后回調到View層,由View層負責顯示。
一般在網絡請求中的錯誤信息分為兩種,一種是網絡設備的網絡狀態錯誤,無法發送請求;另外一種是服務器拒絕了這次請求。所以Presenter的主要功能是:
通知Model層向服務器發起請求;
接收Model層返回的數據(服務器可能返回數據或者拒絕服務信息);
接收Model層返回的網絡錯誤信息;
通知Model層取消這次請求;
通知View接收處理后的數據。
View層:
在MVP模式中,View層是一個接口。它的首要任務是把Presenter處理后的數據傳到具體的原生控件中顯示,并且控制是否顯示加載進度條。
所以View層的主要功能是:
顯示/隱藏進度條。
接收Presenter處理后的正確數據。
接收Presenter返回的網絡錯誤信息。
接收Presenter返回的服務器拒絕服務信息。
MVP模式的核心思想MVP把Activity中的UI邏輯抽象成View接口,把業務邏輯抽象成Presenter接口,Model類還是原來的Model。
在MVP模式中Activity的功能就是響應生命周期和顯示界面,具體其他的工作都丟到了Presenter層中進行完成,Presenter其實是Model層和View層的橋梁。
項目地址:https://github.com/androidsta...
服務端測試項目地址:
http://download.csdn.net/down...
參考鏈接:
http://www.360doc.com/content...
遺留問題:
如果代碼量比較多,是否考慮mvp怎么復用的,如果復用是否會增加耦合度?
總結:過多的追求模式有時候也會適得其反,MVC應用有時候也有太多的寬泛。
MVP+Dagger2+Retrofit2.0+Rxjava看這一個例子就夠了
MVP+Retrofit+Rxjava實戰
如果您覺得很有幫助,歡迎隨時撩我。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/69692.html
摘要:前言了解相關更多技術,可參考我就死磕安卓了,怎么了,接下來談一談我們來學習一下的基本認識。所以層主要的功能是向數據源發起請求取消該請求通知處理結果。 前言 了解相關更多技術,可參考《我就死磕安卓了,怎么了?》,接下來談一談我們來學習一下MVP的基本認識。 大家對MVC的架構模式再熟悉不過。今天我們就學習一下MVP架構模式。 MVC和MVP之間的對比 showImg(https://se...
摘要:前言官方架構組件在今年月份大會上被公布直到月份一直都是測試版由于工作比較繁忙期間我只是看過類似的文章但沒有在實際項目中使用過更沒有看過源碼所以對這幾個組件的使用很是生疏同時也覺得這幾個組件非常高大上非常神秘直到月份官方架構組件正式版發布并且 前言 Android 官方架構組件在今年 5 月份 Google I/O 大會上被公布, 直到 11 月份一直都是測試版, 由于工作比較繁忙, 期...
摘要:是的架構的實現。是在年提出的一種前端架構,主要用來處理復雜的邏輯的一致性問題當時是為了解決頁面的消息通知問題。 去年10月底來到了新公司,剛開始接手 Android 項目時,發現該項目真的是一團遭,項目開發上沒有任何架構可言,開發人員連簡單的 MVC、MVP 都不了解,Activity 及其臃腫,業務邊界也不明確,因此我決定重新分析一下當前主流的幾種開發架構,選出適合當前項目的架構形式...
閱讀 3827·2021-11-25 09:43
閱讀 2170·2021-11-23 10:11
閱讀 1397·2021-09-29 09:35
閱讀 1310·2021-09-24 10:31
閱讀 2035·2019-08-30 15:48
閱讀 2353·2019-08-29 15:28
閱讀 425·2019-08-29 12:36
閱讀 3490·2019-08-28 18:12