MVVM
MVVM(Model–view–viewmodel)是一種軟體架構模式。
MVVM 對圖的使用者介面的開發佮業務邏輯抑是尾仔邏輯(_ 資料模型 _)的開發分離開,這是通過標示語言抑是 GUI 代碼實現的。MVVM 的 _ 視圖模型 _ 是一个值轉換器,這意味對視圖模型負責對模型中暴露(轉換)資料物件,通好輕鬆管理佮呈現物件。佇這方面,視圖模型比視圖閣較濟,並且處理大部份視圖的顯示邏輯。視圖模型會當實現中介者模式,組織對視圖所支援的用例集的後端邏輯的存取。
MVVM 是馬丁 ・ 福勒的 PM(Presentation Model)設計模式的變體。MVVM 用仝款的方式抽象出視圖的狀態佮行為,猶毋過 PM 以 _ 無 _ 依賴佇特定使用者介面平台的方式抽象出視圖(建立了 _ 視圖模型 _)。 MVVM 和 PM 攏來自 MVC 模式。
MVVM 由微軟架構師 Ken Cooper 和 Ted Peters 開發,通過利用 WPF(微軟 . NET 圖形系統)和 Silverlight(WPF 的網際網路應用衍生品)的特性來簡化使用者介面的事件驅動程式設計。微軟乎 WPF 和 Silverlight 架構師之一 John Gossman 佇二空空五年佇伊的部落格頂懸發表矣 MVVM。
MVVM 嘛予人號做model-view-binder,特別是咧袂牽連 . NET 平台的實現中。ZK(Java 寫的一个 Web 應用框殼)和 KnockoutJS(一个 JavaScript 庫)使用 model-view-binder。
MVVM 模式的組成部份
模型
- _ 模型 _ 是指代表真實狀態內容的領域模型(物件導向), 抑是講代表內容的資料存取層(以資料為中心)。
視圖
- 就親像佇咧 MVC 和 MVP 模式內底仝款,視圖是使用者佇螢幕頂懸看著的結構、布局佮外觀(UI)。
視圖模型
- _ 視圖模型 _ 是暴露公共屬性佮命令的視圖的抽象。MVVM 無咧 MVC 模式的控制器,嘛是無 MVP 模式的 presenter,有的是一个 _ 結器 _。佇咧視圖模型中間,結器佇咧視圖佮資料結器之間進行通信。
結器
- 聲明性資料佮命令結隱含佇咧 MVVM 模式當中。佇咧 Microsoft 解決方案就囤佇咧,結器是一種號做 XAML 的彼个語言攏是。結器使開發人員免於被迫編寫樣板式邏輯來仝步視圖模型佮視圖。這馬略軟仔堆以外實現時,聲明性的資料結束技術的出現實現實現模式的一个關鍵因素。
理論基礎
MVVM 旨咧利用 WPF 中的資料結函式,通過對視圖層的強欲共刣掉所有的 GUI 代碼(代碼隱藏), 閣較好地促進視圖層開發佮模式賰的部份的分離。無需要使用者體驗(UX)開發人員編寫 GUI 代碼,𪜶會當使用框標記式語言(如 XAML), 閣建立到應用程式開發人員編寫佮維護的視圖模型的資料結束。角色的分離予互動遮的設計師會當專心使用者體驗需求,毋是對業務邏輯進行編程。按呢乎,應用程式的層次會當佇濟濟工作流內底進行開發以提懸生產力。準講一个開發人員佇咧規代碼庫頂懸作穡,視圖佮模型的適當分離嘛會閣較高效,因為基於總算是使用者回饋,使用者介面通常佇開發周期中定定發生變化,而且佇咧開發周期了後。
MVVM 模式試圖得著 MVC 提供的功能性開發分離的兩个優點,同時利用資料結束的優勢佮通過結束資料的框殼趕緊可能接近純應用程式模型。伊咧用結器、視圖模型佮任何業務層的資料檢查功能來驗證傳入的資料。結果是模型佮框殼趕趕緊可能加操作,消除抑是上細化直接操縱視圖的應用程式邏輯(如代碼隱藏)。
MVVM 模式無仝 MVC,佇咧 MVVM 模式當中,將 ViewModel 重縖結到 View 層後,伊基本是無使用點擊的事件,是使用命令 ( Command ) 來控制。資料的顯示嘛是無仝 MVC,是使用 Binding 來縖結相關的資料。
價值咧講的是,MVVM 通常會使用屬性閣較改通知,資料驅動毋是事件驅動。佇咧 WPF 中當資料發生改變的時陣,會通過介面 INotifyPropertyChanged 通知到對應的組件結合的資料,實現仝步的資料重新整理。
批評
對這種模式的批評來自 MVVM 的創作者 John Gossman 本人,伊指出,實現 MVVM 的開銷對簡單的 UI 操作是「過度的」。 伊講,對閣較大的應用來講,推廣 ViewModel 變甲閣較困難。而且,伊說明了真大的應用程式內底的資料結會致使誠大的記持體消磨。
. NET 中的實現
. NET 框架
- MVVM 基金會
- DotVVM 開源專案
參見
- 多層的架構
- Model–view–controller
- Model–view–presenter
- Ember . js
參考文獻
外部連結
- How to implement MVVM ( Model-View-ViewModel ) in TDD ( test-driven development ) . Microsoft Developer Network . Microsoft . [二千空一十七刣十一孵十九] .(原始內容存檔佇咧二千空一十九學四鋪十五).
- MVVM validation logic , written in Java by Tim Clare
- Understanding MVVM : A Guide for JavaScript Developers . AddysOnmani . com . [二千空一十七刣十一孵十九] .(原始內容存檔佇兩千空一十四抹七堵六).
- MVVM Step by step tutorial . learnmvvm . com . [二千空一十七刣十一孵十九] .(原始內容存檔佇兩千空二十五二鋪五).