1. 程式人生 > >對Android中設計模式MVC,MVP,MVVM的簡單理解

對Android中設計模式MVC,MVP,MVVM的簡單理解

設計模式VS框架

框架是程式碼的重用,可擴充套件。舉幾個簡單的例子。Spring架構,Struts架構。

設計模式是設計的重用,是一種抽象的設計方法。例如MVC,MVP,MVVM。

下面,我們以android開發為例,簡單比較一下三種不同的設計模式。

MVC

MVC是指Modle,View和Controller,將介面,業務邏輯和控制器分開,是一種低耦合的設計方式,適用於簡單應用開發。

舉個簡單的例子。android中的各種控制元件,即為View。例如,一個Button。如果這個Button用於獲取伺服器資訊,我們可以將具體功能實現封裝成一個功能類,叫做HttpUtil。並將獲取的伺服器資訊,存放在ServerResponse類中。那麼,HttpUtil和ServerResponse即為Modle。那麼誰是Controller呢?Activity即為Controller,它將Modle和View連線起來。點選Button,將觸發Activity的onClickLisener方法,從而進一步觸發HttpUtil類。HttpUtil在獲取結果後,將其封裝為ServerResponse,ServerResponse顯示至相應控制元件。

這種設計模式最為簡單,但問題有三。

(1)View與Modle(ServerResponse類)相互可見,耦合度高。

(2)如果程式複雜,那麼Activity這個Controller將十分繁瑣複雜,不容易維護。

(3)Activity角色模糊,View或Modle。

因此,從MVC的基礎上,衍生出了MVP模式。

MVP

P是指Presenter,即實現者,功能與Controller類似。Presenter實質為Interface類的運用,用於降低M,V,C間的耦合度,主旨是為Activity或Fragemnt瘦身。

Activity或Fragment瘦身後,應只包含setListener,生命週期控制,View介面實現,init以及Presenter的呼叫。而具體的操作,都在Presenter Implimentation類中實現。

經典的MVP模式,基本上包括6個部分

(1)View介面

View介面,用於定義View的更新邏輯,這個介面需要在Acitivity中實現。比如,顯示進度條,隱藏進度條,控制元件text更新等。

(2)View介面實現類

即原有的Activity和Fragment。該類中將進行Presenter介面實現類的初始化,以及Presenter相應介面的呼叫。

(3)Presenter介面

Presenter介面,用於定義業務邏輯。例如請求網路資料。

(4)Presenter介面實現類

用於實現Presenter定義的具體業務。此類將View介面和Modle介面作為自身的成員變數。前者由View介面實現類,在對Presenter介面實現類進行初始化時傳入。而Modle介面變數,在Presenter介面實現類中進行初始化。

(5)Modle介面

Modle介面,用於定義Modle共有特性。該介面可有可無。

(6)Modle介面實現類

Modle介面的具體實現,可以理解為上例中的ServiceResponse物件。

由此可見,Presenter介面實現類是整個模式的核心部分,Modle和View在此通過介面的形式進行互動。

MVP模式,容易維護,可拆卸,可擴充套件,耦合性較MVC小,結構清晰。

MVP的缺點,在於開發開銷相對較大。與MVC相比,需要維護更多的介面。

MVVM

MVVM由三部分組成,M,V,VM,分別代表Modle,View,ViewModle。談論MVVM模式的前提,需要了解DataBinding,即將Modle與View進行繫結,包括單向繫結(Modle影響View),雙向繫結(Modle與View相互影響)。

而DataBinding的實現,需要在View中引入Modle(佈局檔案中加入data節點,加入資料類的引用),同樣Modle中也要實現對View中控制元件的繫結(雙向繫結時)。而這樣的後果是,不僅沒有將兩者隔離,反而增加了耦合度。這與個人的程式設計習慣相抵觸,因而較少使用。

MVVM模式的側重點,在於資料和UI的聯動,自動更新,而非降低耦合度。對於耦合度的問題,其實還需要結合MVP模式來解決。

小結

通過對三種模式的總結,可以看出,一個好的設計模式,不是單一的。不同的模式,各有各的優缺點,需要根據專案性質,選擇適合的模式。但若真要選出一款適合自己開發習慣的模式,個人還是優選MVP,畢竟擴充套件性好,模組劃分清晰,且耦合度相對較低,容易維護。

參考文獻