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 做出相應更新。這個一來一回的過程就是咱們所熟知的雙向綁定。對象