設(shè)計(jì)模式(MVC/MVP/MVVM)
MVC(Model View Controller):
- 數(shù)據(jù)模型(Model):數(shù)據(jù)保存易核,代表數(shù)據(jù)模型耸成,也可以在Model中定義數(shù)據(jù)修改和操作的業(yè)務(wù)邏輯
- 視圖(View):代表UI 組件报亩,它負(fù)責(zé)將數(shù)據(jù)模型轉(zhuǎn)化成UI 展現(xiàn)出來。
- 控制器(Controller):業(yè)務(wù)邏輯
- MVC特點(diǎn):
- 用戶可以向 View 發(fā)送指令(DOM 事件)井氢,再由 View 直接要求 Model 改變狀態(tài)弦追。
- 用戶也可以直接向 Controller 發(fā)送指令,再由 Controller 發(fā)送給 View花竞。
- Controller 非常薄劲件,只起到路由的作用掸哑,而 View 非常厚,業(yè)務(wù)邏輯都部署在 View零远。
MVVM(Model-View-ViewModel )
- Model 代表數(shù)據(jù)模型苗分,也可以在Model中定義數(shù)據(jù)修改和操作的業(yè)務(wù)邏輯。
- View 代表UI 組件牵辣,它負(fù)責(zé)將數(shù)據(jù)模型轉(zhuǎn)化成UI 展現(xiàn)出來摔癣。
- ViewModel 監(jiān)聽模型數(shù)據(jù)的改變和控制視圖行為、處理用戶交互纬向,簡單理解就是一個同步View 和 Model的對象,連接Model和View。
- MVVM特點(diǎn)
在MVVM架構(gòu)下担孔,View 和 Model 之間并沒有直接的聯(lián)系,而是通過ViewModel進(jìn)行交互,Model 和 ViewModel 之間的交互是雙向的谒府, 因此View 數(shù)據(jù)的變化會同步到Model中债蓝,而Model 數(shù)據(jù)的變化也會立即反應(yīng)到View 上芳誓。
ViewModel 通過雙向數(shù)據(jù)綁定把 View 層和 Model 層連接了起來,而View 和 Model 之間的同步工作完全是自動的赂摆,無需人為干涉,因此開發(fā)者只需關(guān)注業(yè)務(wù)邏輯达传,不需要手動操作DOM, 不需要關(guān)注數(shù)據(jù)狀態(tài)的同步問題,復(fù)雜的數(shù)據(jù)狀態(tài)維護(hù)完全由 MVVM 來統(tǒng)一管理。
Vue核心原理:
- Vue由數(shù)據(jù)驅(qū)動叽讳,Vue是一個提供了MVVM風(fēng)格的雙向數(shù)據(jù)綁定的Javascript庫懈糯,專注于View 層她紫。它讓開發(fā)者省去了操作DOM的過程,只需要改變數(shù)據(jù)即可民褂。
- Vue實(shí)現(xiàn)數(shù)據(jù)雙向綁定竖哩,采用數(shù)據(jù)劫持結(jié)合發(fā)布者-訂閱者模式的方式期丰,通過Object.defineProperty來劫持各個屬性的setter街立,getter,在數(shù)據(jù)變動時發(fā)布消息給訂閱者虽画,觸發(fā)相應(yīng)監(jiān)聽回調(diào)个盆。
- 虛擬DOM柴梆,vue會建立虛擬dom樹,當(dāng)被監(jiān)測的數(shù)據(jù)改變會通過Object.defineProperty定義的數(shù)據(jù)攔截,截取到數(shù)據(jù)的變化脯厨,從而通過發(fā)布訂閱者模式临梗,觸發(fā)Watcher(觀察者)汤善,從而改變虛擬dom的具體數(shù)據(jù)不狮,從而改變最后渲染的dom樹的值,完成雙向數(shù)據(jù)綁定