天天看點

MVC模式與MVVM模式

一、MVC

MVC模式與MVVM模式

MVC即模型(Model)、視圖(View)、控制器(Controller)

MVC允許在不改變視圖的情況下改變視圖對使用者輸入的響應方式,使用者對View的操作交給了Controller處理,在Controller中響應View的事件調用Model的接口對資料進行操作,一旦Model發生變化便通知相關視圖進行更新。Controller可以直接操作View,可以直接向Modal請求資料,而Modal與View互相之間不能通信。

其中:

  • 1.Modal和View永遠不能互相通信,隻能通過Controller傳遞。
  • 2.Controller可以直接與Modal對話(讀寫調用Modal),Modal通過Notification和KVO機制與Controller間接通信。
  • 3.Controller可以直接與View對話,通過outlet直接操作View,outlet直接對應到View中的控件,View通過action向Controller報告事件的發生(如使用者Touch)。Controller是View的代理,以同步View和Controller。
如果前端沒有架構,隻使用原生的html+js,MVC模式可以這樣了解。将html看成view;js看成controller,負責處理使用者與應用的互動,響應對view的操作(對事件的監聽),調用Model對資料進行操作,完成model與view的同步(根據model的改變,通過選擇器對view進行操作);将js的ajax當做Model,也就是資料層,通過ajax從伺服器擷取資料。

二、MVVM

MVC模式與MVVM模式

MVVM:模型(Model) 、視圖(View)、視圖模型(ViewModel)

MVVM是一個MVC的增強版,正式連接配接了視圖和控制器,并将表示邏輯從Controller移出放到一個新的對象裡,即ViewModal。它實作了View和Modal的自動同步,即當Modal的屬性改變時,我們不用再自己手動操作Dom元素來改變View的顯示,而是改變屬性後該屬性對應的View層顯示會自動改變。

      在Vue中,其HTML部分相當于View層,data相當于Modal層,而ViewModal層的核心是Vue中的雙向資料綁定,即Modal變化時View可以實時更新,View變化也能讓Modal發生變化。

整體看來,MVVM比MVC精簡的多,不僅簡化了業務與界面的依賴,還解決了資料頻繁更新的問題,不用再用選擇器操作DOM元素。因為在MVVM中,View不知道Modal的存在,Modal和View Modal也觀察不到View,這種低耦合模式提高代碼的可複用性。