MVC、MVP、MVVM這些模式是爲了解決開發過程中的實際問題而提出來的,目前作爲主流的幾種架構模式而被廣泛使用。
一、MVC(Model-View-Controller)
MVC是比較直觀的架構模式,用戶操作->View(負責接收用戶的輸入操作)->Controller(業務邏輯處理)->Model(數據持久化)->View(將結果反饋給View)。
- View 傳送指令到 Controller
- Controller 完成業務邏輯後,要求 Model 改變狀態
- Model 將新的數據發送到 View,用戶得到反饋
他們都是單向傳遞。
二、MVP(Model-View-Presenter)
MVP是把MVC中的Controller換成了Presenter(呈現),目的就是爲了完全切斷View跟Model之間的聯繫,由Presenter充當橋樑,做到View-Model之間通信的完全隔離。
- 各部分之間的通信,都是雙向的。
- View 與 Model 不發生聯繫,都通過 Presenter 傳遞。
- View 非常薄,不部署任何業務邏輯,稱爲”被動視圖”(Passive View),即沒有任何主動性,而 Presenter非常厚,所有邏輯都部署在那裏。
三、MVVM(Model-View-ViewModel)
如果說MVP是對MVC的進一步改進,那麼MVVM則是思想的完全變革。它是將“數據模型數據雙向綁定”的思想作爲核心,因此在View和Model之間沒有聯繫,通過ViewModel進行交互,而且Model和ViewModel之間的交互是雙向的,因此視圖的數據的變化會同時修改數據源,而數據源數據的變化也會立即反應到View上。
這方面典型的應用有.NET的WPF,js框架Knockout、AngularJS等。
唯一的區別是,它採用雙向綁定(data-binding):View的變動,自動反映在 ViewModel,反之亦然。Angular 和 Ember 都採用這種模式。
參考資料: