MVC模式:
分為三層:
視圖(View):用戶界面。
控制器(Controller):業(yè)務(wù)邏輯
模型(Model):數(shù)據(jù)保存
通信邏輯是:
1.View發(fā)送指令(DOM事件)
2.Controller處理業(yè)務(wù),觸發(fā)數(shù)據(jù)更新
3.Model將新數(shù)據(jù)更新到View
這屬于單向通信,缺陷是當(dāng)有變化的時候需要維護(hù)三個對象和三個交互。
用戶可以向 View發(fā)送指令(DOM 事件),再由 View直接要求 Model 改變狀態(tài)。
用戶也可以直接向 Controller發(fā)送指令(改變 URL 觸發(fā) hashChange 事件,不是先觸動DOM事件),再由 Controller發(fā)送給 View
MVP模式:
將 Controller 改名為 Presenter,同時改變了通信方向。
1.各部分通信都是雙向的。
2.隔絕了View和Model之間的通信,都是通過Presenter傳遞。減少在需求變化中維護(hù)對象的數(shù)量。
3.View非常薄,不部署任何業(yè)務(wù)邏輯,稱為"被動視圖"(Passive View),即沒有任何主動性,而 Presenter非常厚,所有邏輯都部署在那里。
MVP定義了Presenter和View之間的接口,讓一些可以根據(jù)已有的接口協(xié)議去各自分別獨立開發(fā),以此去解決界面需求變化頻繁的問題。通常View與Presenter是一對一的,但復(fù)雜的View可能綁定多個Presenter來處理邏輯。
MVP中的V和P,V是被動的,而P則控制著對V請求的處理,view僅將用戶的(事件)請求提交到P,它并不參與對用戶請求的處理,如果在這個過程中P要V參與(如:顯示實時的數(shù)據(jù)等)也是P將要展現(xiàn)的數(shù)據(jù)PUSH到V,對于處理的結(jié)果的呈現(xiàn)也是同樣的處理方式。所以V和P之間是通過DOM事件入口進(jìn)行交互。
MVVM模式:
將 Presenter 改名為 ViewModel,基本上與 MVP 模式完全一致。
但是MVVM中的View和ViewModel之間沒有接口,是使用數(shù)據(jù)綁定的形式進(jìn)行雙向交互。數(shù)據(jù)綁定可以認(rèn)為是Observer模式或者Pbulic/Subscribe模式。
MVVM模式不僅簡化了業(yè)務(wù)與界面的依賴,還優(yōu)化了數(shù)據(jù)頻繁更新的解決方案,是一種更有效的解決模式。(低耦合、方便獨立開發(fā),可重用、易測試)
參考資料: