MVC模式的意思是,軟件能夠分紅三個部分。git
- 視圖(View):用戶界面。
- 控制器(Controller):業務邏輯
- 模型(Model):數據保存
各部分之間的通訊方式以下。angularjs
- View 傳送指令到 Controller
- Controller 完成業務邏輯後,要求 Model 改變狀態
- Model 將新的數據發送到 View,用戶獲得反饋
全部通訊都是單向的。github
接受用戶指令時,MVC 能夠分紅兩種方式。一種是經過 View 接受指令,傳遞給 Controller。ide
另外一種是直接經過controller接受指令。spa
實際項目每每採用更靈活的方式,以 Backbone.js 爲例。3d
1. 用戶能夠向 View 發送指令(DOM 事件),再由 View 直接要求 Model 改變狀態。雙向綁定
2. 用戶也能夠直接向 Controller 發送指令(改變 URL 觸發 hashChange 事件),再由 Controller 發送給 View。事件
3. Controller 很是薄,只起到路由的做用,而 View 很是厚,業務邏輯都部署在 View。因此,Backbone 索性取消了 Controller,只保留一個 Router(路由器) 。backbone
MVP 模式將 Controller 更名爲 Presenter,同時改變了通訊方向。ci
1. 各部分之間的通訊,都是雙向的。
2. View 與 Model 不發生聯繫,都經過 Presenter 傳遞。
3. View 很是薄,不部署任何業務邏輯,稱爲"被動視圖"(Passive View),即沒有任何主動性,而 Presenter很是厚,全部邏輯都部署在那裏。
MVVM 模式將 Presenter 更名爲 ViewModel,基本上與 MVP 模式徹底一致。
惟一的區別是,它採用雙向綁定(data-binding):View的變更,自動反映在 ViewModel,反之亦然。Angular 和 Ember 都採用這種模式。