簡介
MVP 模式是 MVC 模式的一個演化版本,MVP 全稱 Model-View-Presenter。目前 MVP 在 Android 應(yīng)用開發(fā)中越來越重要了。
設(shè)計圖

mvp.png
優(yōu)點
- 模型與視圖完全分離;
- 可以更高效地使用模型,因為所有的交互都發(fā)生在一個地方—— Presenter 內(nèi)部;
- 一個 Presener 可以用于多個視圖(View),而不需要改變 Presenter 的邏輯。視圖(View)的變化比模型(Model)的變化更頻繁的多 ,所以這樣超級方便;
- View 可以進行組件化。在 MVP 當(dāng)中,View 不依賴 Model。這樣就可以讓 View 從特定的業(yè)務(wù)場景中脫離出來,可以說 View 可以做到對業(yè)務(wù)邏輯完全無知。它只需要提供一系列接口提供給上層操作。這樣就可以做高度可復(fù)用的 View 組件。
- 更容易單元測試
缺點
- 由于對視圖的渲染放在了 Presenter 中,所以視圖 View 和 Presenter 的交互會過于頻繁。特別是需要修改視圖的時候,Presenter也需要跟著修改,很麻煩。
- Presenter 中除了業(yè)務(wù)邏輯以外,還有大量的 View->Model,Model->View的手動同步邏輯,造成 Presenter 比較笨重,維護起來會比較困難。
- 其實總的來說就是結(jié)構(gòu)很清晰,業(yè)務(wù)邏輯也很明白,耦合低,但是就是自己寫的麻煩,Presenter 不好維護,工作量太大,太笨重,有點像 MVC 中的 Activity 了,職責(zé)太多了。
實例
小結(jié)
通過引入接口 BaseView,讓相應(yīng)的視圖組件如 Activity,F(xiàn)ragment 去實現(xiàn)BaseView,實現(xiàn)了視圖層的獨立,通過中間層 Preseter 實現(xiàn)了 Model 和 View 的完全解耦。MVP 徹底解決了 MVC 中 View 和 Controller 傻傻分不清楚的問題,但是隨著業(yè)務(wù)邏輯的增加,一個頁面可能會非常復(fù)雜,UI 的改變是非常多,會有非常多的 case,這樣就會造成 View 的接口會很龐大。