前端表現(xiàn)與數(shù)據(jù)分離之模式

MVC模式:


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í)改變了通信方向。


MVP


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


但是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è)試)


參考資料:

MVC MVP和MVVM的圖示

MVC,MVP,MVVM淺析

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容