轉載至【http://www.ruanyifeng.com/blog/2015/02/mvcmvp_mvvm.html】
MVC
所有的通信都是單向的。
M(Model)V(View)C(Controller)
View:視圖:用戶界面--是直接面向最終用戶的“視圖層”,是能與用戶操作交互的界面。
Model:模型:數據保存--是核心的“數據層”,是程序要操作的數據或信息。
Controller:控制器:業務邏輯--負責根據用戶從“視圖層”輸入 的指令,選取“數據層”中的數據,然后對其進行相應操作后,產生最后結果。

- 用戶可以向 View 發送指令(DOM 事件),再由 View 直接要求 Model 改變狀態。
- 用戶也可以直接向 Controller 發送指令(改變 URL 觸發 hashChange 事件),再由 Controller 發送給 View。
- 用戶也可以直接向 Controller 發送指令(改變 URL 觸發 hashChange 事件),再由 Controller 發送給 View。
MVP
MVP 模式將 Controller 改名為 Presenter,同時改變了通信方向
M(Model)V(View)P(Presenter)

- 各部分之間的通信,都是雙向的。
- View 與 Model 不發生聯系,都通過 Presenter 傳遞。
- View 非常薄,不部署任何業務邏輯,稱為"被動視圖"(Passive View),即沒有任何主動性,而 Presenter非常厚,所有邏輯都部署在那里。
MVVM
MVVM 模式將 Presenter 改名為 ViewModel,基本上與 MVP 模式完全一致。
M(Model)V(View)V(View)M(ViewModel)

唯一的區別是,它采用雙向綁定(data-binding):View的變動,自動反映在 ViewModel,反之亦然。Angular 和 Ember 都采用這種模式。
