MVVM模式最早是由微軟提出來(lái)的妨退,MVVM代表:Model---View---ViewModel
這里的ViewModel我們可以簡(jiǎn)單理解為頁(yè)面上所顯示內(nèi)容的數(shù)據(jù)抽象啊奄,也可把它看做的一個(gè)弱的Controller。
在ViewModel中有一個(gè)交Binder的東西,view和model之間的數(shù)據(jù)同步的操作都是交由Binder處理,你只需要在view的模板語(yǔ)法中指令式的聲明view上顯示的內(nèi)容與Model中的哪塊數(shù)據(jù)綁定即可烫罩,當(dāng)Viewmodel進(jìn)行Model更新的時(shí)候(例如ajax請(qǐng)求數(shù)據(jù)),Binder會(huì)自動(dòng)的吧數(shù)據(jù)渲染到view上面洽故,當(dāng)用戶(hù)進(jìn)行操縱的時(shí)候(例如表單輸入)贝攒,Binder也會(huì)把數(shù)據(jù)更新到Model上,這種方式叫數(shù)據(jù)的雙向綁定时甚。
也就是說(shuō)MVVM模式把view和model數(shù)據(jù)同步的操作自動(dòng)化了隘弊,提供了雙向綁定的機(jī)制,現(xiàn)在流行的Angular以及vue都是按此模式實(shí)現(xiàn)數(shù)據(jù)的雙向綁定撞秋,這里需要說(shuō)明的是同樣現(xiàn)在很流行react框架并不是MVVM的框架长捧,他只能算一個(gè)view層,它的數(shù)據(jù)綁定是單向的吻贿。
MVVM的優(yōu)缺點(diǎn):
優(yōu)點(diǎn):① 解決了view層和model層數(shù)據(jù)自動(dòng)同步的問(wèn)題串结,提供了數(shù)據(jù)的雙向綁定。
② ?簡(jiǎn)化了測(cè)試,同步邏輯交給了Binder去處理肌割,view和model層變成了只是純數(shù)據(jù)的概念卧蜓,并且二者的數(shù)據(jù)一致,只需要保證model層的數(shù)據(jù)正確把敞,那么view層的數(shù)據(jù)也正確弥奸。大大減少了對(duì)view的同步更新的測(cè)試
缺點(diǎn):① ?大型的項(xiàng)目,視圖狀態(tài)較多的話(huà)奋早,ViewModel會(huì)變得很冗雜盛霎,ViewModel構(gòu)建和維護(hù) ? ? ? ? ? ? ? ? ? ? 的成本會(huì)比較高。
? ? ? ? ? ? ?② 數(shù)據(jù)綁定的聲明時(shí)指令式的寫(xiě)在view模板中耽装,沒(méi)法打斷點(diǎn)去debug.