androidmvp
Ⅰ android mvp是什麼意思
MVP模式是MVC模式在Android上的一種變體,要介紹MVP就得先介紹MVC。在MVC模式中,Activity應該是屬於View這一層。而實質上,它既承擔了View,同時也包含一些Controller的東西在裡面。這對於開發與維護來說不太友好,耦合度大高了。把Activity的View和Controller抽離出來就變成了View和Presenter,這就是MVP模式。
在Android項目中,Activity和Fragment占據了大部分的開發工作。如果有一種設計模式(或者說代碼結構)專門是為優化Activity和Fragment的代碼而產生的,你說這種模式重要不?這就是MVP設計模式。
按照MVC的分層,Activity和Fragment(後面只說Activity)應該屬於View層,用於展示UI界面,以及接收用戶的輸入,此外還要承擔一些生命周期的工作。Activity是在Android開發中充當非常重要的角色,特別是TA的生命周期的功能,所以開發的時候我們經常把一些業務邏輯直接寫在Activity裡面,這非常直觀方便,代價就是Activity會越來越臃腫,超過1000行代碼是常有的事,而且如果是一些可以通用的業務邏輯(比如用戶登錄),寫在具體的Activity里就意味著這個邏輯不能復用了。如果有進行代碼重構經驗的人,看到1000+行的類肯定會有所顧慮。因此,Activity不僅承擔了View的角色,還承擔了一部分的Controller角色,這樣一來V和C就耦合在一起了,雖然這樣寫方便,但是如果業務調整的話,要維護起來就難了,而且在一個臃腫的Activity類查找業務邏輯的代碼也會非常蛋疼,所以看起來有必要在Activity中,把View和Controller抽離開來,而這就是MVP模式的工作了。
Ⅱ Android MVP 開發模式有哪些優缺點
MVP概念:
MVP(Model-View-Presenter) 是總所周知MVC模式的一個演變,主要目的都是劃分模塊職責,降低模塊耦合,易測試,提高代碼復用。
1、層級責任
2、Model:負責數據的檢索,持久化等操作。
3、View: 負責UI的繪制和用戶的交互。
4、Presenter: 作為Model和View的中間協調部分,負責兩者之間的業務邏輯處理。
MVC模式的區別
1、MVC模式允許View層和Model層直接通訊。
2、當某個View的功能很復雜的時候,View和Model的耦合度可能會很高。
3、MVP模式就沒有這個問題,View會抽象出來一系列操作UI的介面。
4、Presenter拿到的都是其他兩個層級的介面來做業務邏輯的處理,這樣不僅可以使View和Model之間的耦合度降低,還可以更易得進行單元測試。
MVP的優缺點
1、優點:降低耦合,層級職責更明顯,易於單元測試。
2、缺點:造成類數量爆炸,代碼復雜度和學習成本高,在某些場景下presenter的復用會產生介面冗餘。
Ⅲ Android MVP模式中,一個Activity對應多個Presenter時該怎樣抽象
View 和 Presenter 之間是有協議約束的.
假設現有V1, P1, V2, P2, 一個ActivityA對應了P1/P2的功能, 也應該說明它實現了V1/V2介面, 此時應該有PresenterA 實現了P1, P2. 這就是完整的VP的協議就對上了.
這里既然多個頁面可能用到同樣的功能, 最簡單的方式節點使用多繼承(一個Persenter實現ABCD四個介面), 這樣不管Activity實際上用的都是同一個Persenter.如果確定現在已經有實現了, 按樓上的方法實現一個代理就可以了.
實在要實現多個Presenter的話, 可以定義幾個不同的類, 來支持不同多個Presenter的擴展:
class BaseMvpActivity1<P> extent BaseActivity {
P presenter;
}
class BaseMvpActivity2<P1, P2> extent BaseActivity {
P1 presenter1;
P2 presenter2;
}
但不推薦這樣做(失去抽象, 違反依賴倒置原則); 更不推薦使用數組或List(基類使用泛型方便編譯器檢查, 數組或List在具體使用時需要做類型的強轉)
Ⅳ Android MVP 開發模式有哪些優缺點
MVP開發模式的優點:
1.項目結構清晰,解耦程度高,每個功能相互之間獨立,可單獨測試。
2.代碼維護性高,代碼出線Bug,能夠快速定位。
3.功能擴展性強,增加業務功能時,並不需要去修改原始代碼,只需增加相應的業務代碼即可。
MVP開發模式的缺點:
1.項目會出現大量的presenter,大大增加了類的數量。
2.因為Activity會持有presenter的引用,使用不當的話,容易出現內存泄露問題。
Ⅳ Android為什麼要使用MVP
你好!在Android上邏輯介面和數據存取是緊耦合的,這個問題可以看看CursorAdapter這個例子,它既融合了適配器,同時也有顯示的成分,而cursor很大程度上應該是數據數據存取層的。
MVP模式可以讓顯示界面和數據分離,開發的應用可以分離至少三層,這樣也可以進行獨立測試。有了MVP就可以從Activity中分離大部分代碼,而且不用單元測試可以對每個模塊進行單獨測試了。希望幫助你
Ⅵ Android MVP 開發模式有哪些優缺點
android MVP開發模式的優點
1)View和Model之間的耦合度降低,使其更關注自身業務邏輯,結構清晰,維護方便;
2)便於單元測試;
3)代碼復用率提高;
4)代碼框架更適用於快速迭代開發;
android MVP開發模式的缺點
任何開發模式都是有利也有弊的,畢竟世間完美的事物還是少見的。上面提到了MVP模式的有點,那就不得不說其還存在的缺點,或者說不足更准確吧。
MVP模式的不足,主要表現在每個view都有presenter ,類相對比較多。
Ⅶ Android MVP 開發模式有哪些優缺點
MVP開發模式的優點: 1.項目結構清晰,解耦程度高,每個功能相互之間獨立,可單獨測試。 2.代碼維護性高,代碼出線Bug,能夠快速定位。 3.功能擴展性強,增加業務功能時,並不需要去修改原始代碼,只需增加相應的業務代碼即可
Ⅷ 如何實現自己的Android MVP框架
前言MVP作為一種MVC的演化版本在Android開發中受到了越來越多的關注,但在項目開發中選擇一種這樣的軟體設計模式需保持慎重心態,一旦確定使用MVP作為你App的開發模式那麼你就最好堅持做下去,如果在使用MVP模式開發過程中發現問題而且坑越來越大,這時你想用MVC等來重新設計的話基本上就等於推倒重來了。要知道在Android上MVP在現在為止並沒有統一的標准或者框架,不像SSH這三個成熟穩重強而有力的三劍客支持推動著JavaEE的開發,所以在運用MVP時一定要做好自己的理解,並且盡量預知自己App各模塊的需求(客戶說改改改,我們就改改改:-()以便提前做好充分的設計工作。當然MVP既然能出現那麼必然有它的優點的,不然誰會理會這個冒出來的東西,下面就對Android中MVP做一些闡述。MVP簡介相信大家對MVC都是比較熟悉了:M-Model-模型、V-View-視圖、C-Controller-控制器,MVP作為MVC的演化版本,也是作為用戶界面(用戶層)的實現模式,那麼類似的MVP所對應的意義:M-Model-模型、V-View-視圖、P-Presenter-表示器。從MVC和MVP兩者結合來看,Controlller/Presenter在MVC/MVP中都起著邏輯控制處理的角色,起著控制各業務流程的作用。而MVP與MVC最不同的一點是M與V是不直接關聯的也是就Model與View不存在直接關系,這兩者之間間隔著的是Presenter層,其負責調控View與Model之間的間接交互,MVP的結構圖如下所示,對於這個圖理解即可而不必限於其中的條條框框,畢竟在不同的場景下多少會有些出入的。在Android中很重要的一點就是對UI的操作基本上需要非同步進行也就是在MainThread中才能操作UI,所以對View與Model的切斷分離是合理的。此外Presenter與View、Model的交互使用介面定義交互操作可以進一步達到松耦合也可以通過介面更加方便地進行單元測試。MVP結構圖MVP之ModelModel是用戶界面需要顯示數據的抽象,也可以理解為從業務數據(結果)那裡到用戶界面的抽象(Businessrule,dataaccess,modelclasses)。本文Demo為了簡單處理就直接把業務放到了對應的Model之中。MVP之View視圖這一層體現的很輕薄,負責顯示數據、提供友好界面跟用戶交互就行。MVP下Activity和Fragment體現在了這一層,Activity一般也就做載入UI視圖、設置監聽再交由Presenter處理的一些工作,所以也就需要持有相應Presenter的引用。例如,Activity上滾動列表時隱藏或者顯示Acionbar(Toolbar),這樣的UI邏輯時也應該在這一層。另外在View上輸入的數據做一些判斷時,例如,EditText的輸入數據,假如是簡單的非空判斷則可以作為View層的邏輯,而當需要對EditText的數據進行更復雜的比較時,如從資料庫獲取本地數據進行判斷時明顯需要經過Model層才能返回了,所以這些細節需要自己掂量。MVP之PresenterPresenter這一層處理著程序各種邏輯的分發,收到View層UI上的反饋命令、定時命令、系統命令等指令後分發處理邏輯交由業務層做具體的業務操作,然後將得到的Model給View顯示。演示demo動手寫起代碼來才有更好的感覺。demo很簡單,還是上個圖更直觀,輸入城市的代號,點擊按鈕獲取城市的天氣信息然後顯示出來,網路操作使用Volley框架,解析用Gson,其它的就手寫了。整個項目的包設計如下:包結構項目效果預覽包圖中明顯的三層:Model包、Presenter包、UI包,其中,三者都實現各自的結構,Model為WeatherModel、Presenter為WeatherPresenter、View為Weather,那麼具體實現類就是impl包里的了,View層的即為Activity。此外的app和util包無關緊要可以不看。可以看到採用MVP設計後項目明顯多了很多東西,這也是不可避免的,使用原始方法可以使項目開起來簡單些但是以後還有維護呢、測試呢、加功能呢、。。。entity里的實體屬性基本上對應json里的這些屬性了,代碼不貼了View裡面的介面:publicinterfaceWeatherView{voidshowLoading();voidhideLoading();voidshowError();voidsetWeatherInfo(Weatherweather);}WeatherPresenter的介面:{/***獲取天氣的邏輯*/voidgetWeather(StringcityNO);}WeatherModel介面:publicinterfaceWeatherModel{voidloadWeather(StringcityNO,OnWeatherListenerlistener);}prestener裡面還有個OnWeatherListener,其在Presenter層實現,給Model層回調,更改View層的狀態,確保Model層不直接操作View層。如果沒有這一介面在WeatherPresenterImpl實現的話,WeatherPresenterImpl只有View和Model的引用那麼Model怎麼把結果告訴View呢?當然這只是一種解決方案,在實際項目中可以使用Dagger、EventBus、Otto等第三方框架結合進來達到更加松耦合的設計。{/***成功時回調**@paramweather*/voidonSuccess(Weatherweather);/***失敗時回調,簡單處理,沒做什麼*/voidonError();}所以demo的代碼流程:Activity做了一些UI初始化的東西並需要實例化對應WeatherPresenter的引用和實現WeatherView的介面,監聽界面動作,Go按鈕按下後即接收到查詢天氣的事件,在onClick里接收到即通過WeatherPresenter的引用把它交給WeatherPresenter處理。WeatherPresenter接收到了查詢天氣的邏輯就知道要查詢天氣了,然後把查詢天氣的具體業務實現交給WeatherModel去實現同時把WeatherListener即WeatherPresenter自己傳給WeatherModel。WeatherModel進行查詢天氣業務後即把結果通過WeatherListener回調通知WeatherPresenter,WeatherPresenter再把結果返回給View層的Activity,最後Activity顯示結果。就這樣,拍磚之處請拍。End採用哪種軟體設計模式都是為了達到如下目的,找到合適的加以運用就是最好的:易於維護易於測試松耦合度復用性高健壯穩定------------------------------------------------------------------------------------以上內容均參考互聯網,希望以上知識對您有所幫助,
Ⅸ Android MVP 開發模式有哪些優缺點
MVP概念:
MVP(Model-View-Presenter) 是總所周知MVC模式的一個演變,主要目的都是劃分模塊職責,降低模塊耦合,易測試,提高代碼復用。
層級責任
Model:負責數據的檢索,持久化等操作。
View: 負責UI的繪制和用戶的交互。
Presenter: 作為Model和View的中間協調部分,負責兩者之間的業務邏輯處理。
MVC模式的區別
MVC模式允許View層和Model層直接通訊。
當某個View的功能很復雜的時候,View和Model的耦合度可能會很高。
MVP模式就沒有這個問題,View會抽象出來一系列操作UI的介面。
Presenter拿到的都是其他兩個層級的介面來做業務邏輯的處理,這樣不僅可以使View和Model之間的耦合度降低,還可以更易得進行單元測試。
MVP的優缺點
優點:降低耦合,層級職責更明顯,易於單元測試。
缺點:造成類數量爆炸,代碼復雜度和學習成本高,在某些場景下presenter的復用會產生介面冗餘。
Ⅹ Android MVP模式中,一個Activity對應多個Presenter時該怎樣抽象
View 和 Presenter 之間是有協議約束的.
假設現有V1, P1, V2, P2, 一個ActivityA對應了P1/P2的功能, 也應該說明它實現了V1/V2介面, 此時應該有PresenterA 實現了P1, P2. 這就是完整的VP的協議就對上了.
這里既然多個頁面可能用到同樣的功能, 最簡單的方式我節點使用多繼承(一個Persenter實現ABCD四個介面), 這樣不管Activity實際上用的都是同一個Persenter.如果確定現在已經有實現了, 按樓上的方法實現一個代理就可以了.
實在要實現多個Presenter的話, 可以定義幾個不同的類, 來支持不同多個Presenter的擴展:
class BaseMvpActivity1<P> extent BaseActivity {
P presenter;
}
class BaseMvpActivity2<P1, P2> extent BaseActivity {
P1 presenter1;
P2 presenter2;
}
但不推薦這樣做(失去抽象, 違反依賴倒置原則); 更不推薦使用數組或List(基類使用泛型方便編譯器檢查, 數組或List在具體使用時需要做類型的強轉)