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