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)有變化的時(shí)候需要維護(hù)三個(gè)對(duì)象和三個(gè)交互。
用戶可以向 View發(fā)送指令(DOM 事件),再由 View直接要求 Model 改變狀態(tài)。
用戶也可以直接向 Controller發(fā)送指令(改變 URL 觸發(fā) hashChange 事件,不是先觸動(dòng)DOM事件),再由 Controller發(fā)送給 View
MVP模式:
將 Controller 改名為 Presenter,同時(shí)改變了通信方向。

1.各部分通信都是雙向的。
2.隔絕了View和Model之間的通信,都是通過Presenter傳遞。減少在需求變化中維護(hù)對(duì)象的數(shù)量。
3.View非常薄,不部署任何業(yè)務(wù)邏輯,稱為"被動(dòng)視圖"(Passive View),即沒有任何主動(dòng)性,而 Presenter非常厚,所有邏輯都部署在那里。
MVP定義了Presenter和View之間的接口,讓一些可以根據(jù)已有的接口協(xié)議去各自分別獨(dú)立開發(fā),以此去解決界面需求變化頻繁的問題。通常View與Presenter是一對(duì)一的,但復(fù)雜的View可能綁定多個(gè)Presenter來處理邏輯。
MVP中的V和P,V是被動(dòng)的,而P則控制著對(duì)V請(qǐng)求的處理,view僅將用戶的(事件)請(qǐng)求提交到P,它并不參與對(duì)用戶請(qǐng)求的處理,如果在這個(gè)過程中P要V參與(如:顯示實(shí)時(shí)的數(shù)據(jù)等)也是P將要展現(xiàn)的數(shù)據(jù)PUSH到V,對(duì)于處理的結(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模式不僅簡(jiǎn)化了業(yè)務(wù)與界面的依賴,還優(yōu)化了數(shù)據(jù)頻繁更新的解決方案,是一種更有效的解決模式。(低耦合、方便獨(dú)立開發(fā),可重用、易測(cè)試)
參考資料: