Android - MVC、MVP與MVVM架構

一、MVC

1.MVC(Model-View-Controller)介紹。

MVC即爲模型-視圖-控制器,是一種軟件設計模式,通常用於開發用戶界面,該界面將相關的程序邏輯分爲三個相互連接的元素。這樣做是爲了將信息的內部表示形式與信息呈現給用戶和從用戶接受的方式分開。這種模式用於設計頁面的佈局。

傳統上,此模式用於桌面圖形用戶界面(GUI),在設計Web應用程序時已變得很流行。流行的編程語言(如JavaScript,Python,Ruby,PHP,Java,C#和Swift)具有MVC框架,可直接用於Web或移動應用程序開發。

模型(Model)

MVC模式的中心組成部分。它是應用程序的動態數據結構,獨立於用戶界面。它直接管理應用程序的數據,邏輯和規則。

視圖(View)

信息的任何表示形式,例如圖表,圖表或表格。可以使用同一信息的多種視圖,例如用於管理的條形圖和用於會計的表格視圖。

控制器(Controller)

接受輸入並將其轉換爲模型或視圖的命令。

除了將應用程序劃分爲這些組件之外,模型-視圖-控制器設計還定義了它們之間的交互。
  • 模型負責管理應用程序的數據。它從控制器接收用戶輸入。
  • 視圖意味着以特定格式呈現模型。
  • 控制器響應用戶輸入並在數據模型對象上執行交互。控制器接收輸入,可選地對其進行驗證,然後將輸入傳遞給模型。

與其他軟件模式一樣,MVC表示問題的“解決方案核心”,同時允許其適用於每個系統。特定的MVC設計可能與此處的傳統描述大不相同。

服務

在控制器和模型之間有時會有一個稱爲服務的層。它從模型中獲取數據,並讓控制器使用獲取的數據。該層允許分離數據存儲(模型),數據獲取(服務)和數據操作(控制器)。由於此層不是原始MVC概念的一部分,因此在大多數情況下是可選的,但在某些情況下可用於代碼管理和可重用性。

二、MVP

1.MVP(Model-View-Presenter)介紹。

MVP即爲模型-視圖-演示者,是MVC架構模式的派生產品,主要用於構建用戶界面。在MVP中,Presenter承擔“中間人”的功能,所有演示邏輯都被推送到Presenter。

MVP是一種用戶界面架構模式,旨在促進自動化的單元測試並改善表示邏輯中關注點的分離。

模型(Model)

模型定義要在用戶界面中顯示或作用的數據的界面。

視圖(View)

視圖是一個被動的界面,用於顯示數據(模型)並將用戶命令(事件)路由到演示者以對該數據進行操作。

演示者(Presenter)

演示者會根據模型和視圖進行操作。 它從存儲庫(模型)檢索數據,並將其格式化以顯示在視圖中。

通常,視圖實現實例化具體的Presenter對象,併爲其提供引用。

2.項目Github地址。

https://github.com/mythmayor/MvpArchitecture

三、MVVM

1.MVVM(Model-View-ViewModel)介紹。

MVVM即爲模型-視圖-視圖模型,是一種軟件架構模式,可促進將圖形用戶界面(視圖)的開發(通過標記語言或GUI代碼)與業務邏輯或後臺開發的分離。邏輯(模型),以便視圖不依賴於任何特定的模型平臺。 MVVM的視圖模型是一個值轉換器,表示視圖模型負責以易於管理和呈現對象的方式公開(轉換)來自模型的數據對象。在這方面,視圖模型比視圖更具模型性,可以處理大多數(不是全部)視圖顯示邏輯。視圖模型可以實現中介者模式,圍繞視圖支持的一組用例來組織對後端邏輯的訪問。

Model-View-ViewModel也稱爲Model-View-Binder,尤其是在不涉及.NET平臺的實現中。

模型(Model)

模型是指表示真實狀態內容的域模型(面向對象的方法),也是表示內容的數據訪問層(以數據爲中心的方法)。

視圖(View)

就像在MVC模式和MVP模式中一樣,視圖是用戶在屏幕上看到的內容的結構,佈局和外觀。它顯示模型的表示並接收用戶與視圖的交互(單擊,鍵盤,手勢等),並通過數據綁定(屬性,事件回調等)將這些操作的處理轉發給視圖模型。定義爲鏈接視圖和視圖模型。

視圖模型(ViewModel)

視圖模型是視圖的抽象,公開了公共屬性和命令。 MVVM具有綁定程序,可以自動執行視圖及其視圖模型中的綁定屬性之間的通信,而不是MVC模式的控制器或MVP模式的演示者。視圖模型已被描述爲模型中數據的狀態。
在MVP模式中,視圖模型與Presenter之間的主要區別在於,Presenter具有對視圖的引用,而視圖模型則沒有。相反,視圖直接綁定到視圖模型上的屬性以發送和接收更新。爲了有效運行,這需要綁定技術或生成樣板代碼來進行綁定。

綁定器(Binder)

聲明性數據和命令綁定在MVVM模式中是隱式的。綁定器使開發人員不必編寫模板邏輯來同步視圖模型和視圖。

MVVM基本原理

MVVM旨在利用WPF(Windows Presentation Foundation)中的數據綁定功能,通過從視圖層中刪除幾乎所有GUI代碼(“後置代碼”)來更好地促進視圖層開發與其餘模式的分離。

MVVM模式試圖通過將數據綁定到儘可能接近純應用程序模型的方式來利用MVC提供的功能開發分離的優勢,同時利用數據綁定和框架的優勢。它需要使用Binder,視圖模型和任何業務層的數據檢查功能來驗證傳入的數據。結果是模型和框架驅動了儘可能多的操作,從而消除或最小化了直接操縱視圖的應用程序邏輯(例如,後臺代碼)。

MVVM的劣勢

使用MVVM的開銷對於簡單的UI操作來說是過於龐大的。另外非常大的應用程序中進行數據綁定會導致相當大的內存消耗。

2.項目Github地址。

https://github.com/mythmayor/MvvmArchitecture

四、MVC、MVP、MVVM的優缺點比較。

1.MVC的優缺點。

優點:
  • 把業務邏輯全部分離到Controller中,模塊化程度高。當業務邏輯變更的時候,不需要變更View和Model,只需要Controller換成另外一個Controller就行了(Swappable Controller)。
  • 觀察者模式可以做到多視圖同時更新。
缺點:
  • Controller測試困難。因爲視圖同步操作是由View自己執行,而View只能在有UI的環境下運行。在沒有UI環境下對Controller進行單元測試的時候,Controller業務邏輯的正確性是無法驗證的:Controller更新Model的時候,無法對View的更新操作進行斷言。
  • View無法組件化。View是強依賴特定的Model的,如果需要把這個View抽出來作爲一個另外一個應用程序可複用的組件就困難了。因爲不同程序的的Domain Model是不一樣的。

2.MVP的優缺點。

優點:
  • 便於測試。Presenter對View是通過接口進行,在對Presenter進行不依賴UI環境的單元測試的時候。可以通過Mock一個View對象,這個對象只需要實現了View的接口即可。然後依賴注入到Presenter中,單元測試的時候就可以完整的測試Presenter業務邏輯的正確性。
  • View可以進行組件化。在MVP當中,View不依賴Model。這樣就可以讓View從特定的業務場景中脫離出來,可以說View可以做到對業務邏輯完全無知。它只需要提供一系列接口提供給上層操作。這樣就可以做高度可複用的View組件。
缺點:
  • Presenter中除了業務邏輯以外,還有大量的View->Model,Model->View的手動同步邏輯,造成Presenter比較笨重,維護起來會比較困難。

3.MVVM的優缺點。

優點:
  • 提高可維護性。解決了MVP大量的手動View和Model同步的問題,提供雙向綁定機制。提高了代碼的可維護性。
  • 簡化測試。因爲同步邏輯是交由Binder做的,View跟着Model同時變更,所以只需要保證Model的正確性,View就正確。大大減少了對View同步更新的測試。
缺點:
  • 過於簡單的圖形界面不適用,或說牛刀殺雞。
  • 對於大型的圖形應用程序,視圖狀態較多,ViewModel的構建和維護的成本都會比較高。
  • 數據綁定的聲明是指令式地寫在View的模版當中的,這些內容是沒辦法去打斷點debug的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章