淺談Android中的mvc,mvp,mvvm

weixin_34075268發表於2016-12-06

一,MVC

mvc的即model資料模型層,view檢視層,controller控制層;
view層主要是xml佈局檔案,model層主要是資料模型,controller層主要說的是Activity.

mvc的簡單流程:

2595400-f92069b447a20ff1.png

view層向controller層發出指令到controller層,
controller通知model層去更新資料,
model層資料更新之後,直接將資料顯示在view層.
這就是mvc的工作原理

mvc的優點:

如果邏輯非常簡單,mvc還是一個非常不錯的選擇,因為會降低程式碼量.

mvc的缺點:

view層的控制能力太弱,如果我們想動態改變一個頁面的背景,或動態顯示/隱藏一個按鈕,這些都沒辦法在xml檔案中直接定義,需要在Activity中進行動態設定,這時,Activity既是controller層,又是view層,會造成Activity中的程式碼量過於臃腫,雜亂.
view層和model層是可以直接互動的,證明view層和model層存在耦合性,這對於程式碼的維護性和擴充套件性是非常不利的.

二,MVP

mvp是對mvc模式的升級,mvp中的model層主要是關於資料的處理,一般進行資料載入和資料儲存,而Activity,Fragment變為view層,並且view層和model層所有的互動都是通過presenter中間代理人層進行的.從而使view層和model層進行完全解耦.

mvp的簡單流程:


2595400-bbf95f90b4cc9960.png

view層通過呼叫Presenter層介面的方式將業務邏輯轉交給Presenter層,
然後Presenter層通過呼叫model層的介面得到相應的資料,
最後Presenter層通過回撥view層介面的方式將資料回傳給view層.
這樣view層和model層就完全解耦了,同時將Activity中業務邏輯從view層抽取到Presenter中,使Activity中的邏輯更清晰.

優點:

將view層和model層完全解耦
將view層的邏輯抽取到Presenter層中,使view層更專一

缺點:

當專案比較複雜時,MVP框架能使專案更清晰,簡化了功能擴充套件的操作,以及更明瞭的程式碼維護.但如果專案邏輯比較簡單時,就會使程式碼顯的複雜,有殺雞用牛刀的感覺.

三,MVVM

和MVP的結構非常相似,viewmodel層的主要作用是將model層的資料轉為view層所需要的格式,在Android中主要是通過data binding 的形式去實現.

mvvm的簡單流程:


2595400-32d168e660603dd6.png

在MVVM中,View層和Model層進行了雙向繫結(即Data Binding),所以Model資料的更改會表現在View上,反之亦然。ViewModel就是用來根據具體情況處理View或Model的變化。

優點:

擁有MVP的優點

缺點:

需要熟悉databindig框架,學習成本高,但是還是建議大家花時間研究一下.

相關文章