MVC模式:
M:Model(數據模型),用於存放數據
V:View(視圖),也就是用戶界面
C:Controller是Model和View的協調者,Controller把Model中的數據拿過來給View使用。Controller可以直接與Model和View進行通信,而View不能與Controller直接通信。,當有數據更新時,Model也要與Controller進行通信,這個時候就要用Notification和KVO,這個方式就像發廣播一樣,Model發信號,Controller設置接收監聽信號,當有數據更新是就發信號給Controller,Model和View不能直接通信,這樣違背MVC設計原則。View與Controller通信需要利用代理協議的方式,Controller可以直接根據Model決定View的展示。View如果接受響應事件則通過delegate,target-action,block等方式告訴Controller的狀態變化。Controller進行業務的處理,然后再控制View的展示。
MVC:
Controller負責將Model的數據用View顯示出來
用戶操作> View (負責接受用戶的輸入操作)>Controller(業務邏輯處理)>Model(數據持久化)>View(將結果通過View反饋給用戶)
缺點:1.所有業務邏輯都在Controller里操作,邏輯復雜且不利於維護,
2.大量的DOM 操作使頁面渲染性能降低,加載速度變慢,影響用戶體驗。
3.當 Model 頻繁發生變化,需要主動更新到View ;當用戶的操作導致Model發生變化,同樣需要將變化的數據同步到Model中, 這樣的工作不僅繁瑣,而且很難維護復雜多變的數據狀態。
由於MVC模式的缺陷,MVC的變種模式衍生出MVVM模式
MVVM模式:
核心是提供對View 和 ViewModel 的雙向數據綁定,View和Model之間並沒有直接的聯系,而是通過ViewModel進行交互,View的變動,自動反映在ViewModel上,反之亦然,這樣就保證視圖和數據的一致性。
M:Movel(數據模型)
V:View
VM:ViewModel 是一個同步View 和 Model的對象。View 和 Model 之間並沒有直接的聯系,而是通過ViewModel進行交互。ViewModel 通過雙向數據綁定把 View 層和 Model 層連接了起來,而View 和 Model 之間的同步工作完全是自動的,無需人為干涉,因此開發者只需關注業務邏輯,不需要手動操作DOM, 不需要關注數據狀態的同步問題,復雜的數據狀態維護完全由 MVVM 來統一管理。
VM雙向綁定:在 MVVM 框架中,View(視圖) 和 Model(數據) 是不可以直接通訊的,在它們之間存在着 ViewModel 這個中間介充當着觀察者的角色。當用戶操作 View(視圖),ViewModel 感知到變化,然后通知 Model 發生相應改變;反之當 Model(數據) 發生改變,ViewModel 也能感知到變化,使 View 作出相應更新。這個一來一回的過程就是我們所熟知的雙向綁定。