MVC,MVP 和 MVVM(轉載)
阿新 • • 發佈:2018-12-03
1 什麼是MVC
MVC的目的是為了把資料(Model)和檢視(View)分離開來,然後用控制器(Controller)作膠水來粘合M和V之間的關係。
這樣做的目的是為了實現注意點分離這樣一個更高層次的設計理念,也就是讓專業的物件做專業的事情,View就只負責檢視相關的東西,Model就只負責描述資料模型,Controller負責總控,各自協作,別總摻和到一起亂成一鍋粥!
1.1 分層
- 檢視(View):使用者介面,專門負責表現
- 控制器(Controller):業務邏輯
- 模型(Model):資料儲存,專門負責資料
各部分之間的通訊方式如下。
- View傳送指令到 Controller
- Controller完成業務邏輯後,要求Model改變狀態
- Model將新的資料傳送到View,使用者得到反饋
所有通訊都是單向的。
1.2 互動模式
接受使用者指令時,MVC可以分成兩種方式。一種是通過View接受指令,傳遞給Controller。
另一種是直接通過controller接受指令。
1.3 例項
實際專案往往採用更靈活的方式,以Backbone.js為例。
- 使用者可以向View傳送指令(DOM 事件),再由View直接要求Model改變狀態。
- 使用者也可以直接向Controller傳送指令(改變URL觸發hashChange事件),再由Controller傳送給View。
- Controller非常薄,只起到路由的作用,而View非常厚,業務邏輯都部署在View。所以,Backbone 索性取消了Controller,只保留一個 Router(路由器) 。
MVP
MVP 模式將Controller改名為Presenter,同時改變了通訊方向。
- 各部分之間的通訊,都是雙向的。
- View與Model不發生聯絡,都通過Presenter傳遞。
- View非常薄,不部署任何業務邏輯,稱為"被動檢視"(Passive View),即沒有任何主動性,而Presenter非常厚,所有邏輯都部署在那裡。
MVVM
MVVM模式將Presenter改名為ViewModel,基本上與MVP模式完全一致。
唯一的區別是,它採用雙向繫結(data-binding):View的變動,自動反映在ViewModel,反之亦然。Angular和Ember都採用這種模式。