MVC(Mode View Controller)是一種設計模式,它將應用劃分爲三個部分:
數據(模型)、展示層(視圖)、用戶交互(控制器)。css
① 用戶和應用產生交互html
② 控制器的事件處理器被觸發編程
③ 控制器從模型中請求數據,並將其交給視圖設計模式
④ 視圖將數據呈現給用戶mvc
M —— 模型 真正的邏輯處理,存放應用的全部數據對象mvvm
沒必要知道V、C的邏輯,是應用中解耦出來的部分。函數
V —— 視圖 只負責呈現給用戶的頁面的顯示和樣式的展現,html、css、js模板組成工具
除了模板中簡單的條件語句,視圖不該當包含任何其餘邏輯。性能
將邏輯混入視圖是編程大忌,但不是不容許,只要這部分邏輯沒有定義在視圖內便可。將視覺呈現邏輯歸類爲「視圖助手」(helper):和視圖相關的獨立的小工具函數。單元測試
C —— 控制器 是M和V之間的紐帶,進行頁面節點事件的註冊和控制,以及頁面加載性能的實現。
從視圖獲取事件和輸入,進行處理,並更新視圖。頁面加載時,會給視圖添加監聽事件,如監聽表單按鈕點擊、提交。
MVVM(Model View ViewModel)耦合性比較鬆,靈活性更強。
M —— 模型 負責業務邏輯和數據的封裝
V —— 視圖 只負責界面和顯示,與顯示邏輯無關
VM —— 視圖模型 負責了全部的顯示邏輯,在模型的基礎上對模型數據進行封裝,並定義了顯示層的邏輯,負責模型與視圖的交互。
一個視圖模型(VM)能夠爲多個視圖(V)服務,視圖層(V)只須要選擇視圖模型(VM)中的屬性、方法並綁定。
① 低耦合 view能夠獨立於model變化和修改
② 可重用性 不少view能夠用同一個viewmodel
③ 獨立開發
④ 可測試 能夠針對viewmodel來寫測試,測試界面
MVP(Model View Presenter)切斷了view和model的聯繫,讓view只和presenter(原controller)交互,減小在需求變化中須要維護對象的數量。
MVP定義了presenter和view之間的接口,讓一些能夠根據已有的接口協議去各自分別獨立開發,以此去解決界面需求變化頻繁的問題。
① 模型與視圖徹底分離,能夠修改視圖但不影響模型
② 能夠更高效的使用模型,由於全部的交互都發生在presenter(展現器)內部
③ 能夠將一個presenter用於多個視圖,而不須要改變presenter的邏輯
④ 若是把邏輯放在presenter中,就能夠脫離用戶接口來測試這些邏輯(單元測試)
由於對視圖的渲染presenter中,因此視圖和presenter的交互過於頻繁。若是presenter過多的渲染了視圖,每每會使得它與特定的視圖的聯繫過於緊密,「動一發極可能要牽另外一發」。