開發應用程序時,以求更好的管理應用程序的複雜性,基於職責分離的思想對應用程序進行分層:前端
MVC 把應用程序分紅View、Model、Controller層。vue
MVC出了把應用程序分紅View、Model層,還額外的加了一個Controller層,它的職責爲進行Model和View之間的協做(路由、輸入預處理等)的應用邏輯(application logic);Model進行處理業務邏輯。Model、View、Controller三個層次的依賴關係以下:
git
Controller和View都依賴Model層,Controller和View能夠互相依賴。Controller和View的依賴關係都是爲了把處理用戶行爲觸發的事件處理權交給Controller。github
優勢:前端框架
缺點:app
MVP模式是MVC模式的改良。框架
MVP模式有兩種:模塊化
大多數狀況下討論的都是Passive View模式組件化
MVP模式把MVC模式中的Controller換成了Presenter。MVP層次之間的依賴關係以下:
MVP打破了View原來對於Model的依賴,其他的依賴關係和MVC模式一致。單元測試
調用關係以下:
用戶對View的操做都會從View交移給Presenter。Presenter會執行相應的應用程序邏輯,而且對Model進行相應的操做;而這時候Model執行完業務邏輯之後,也是經過觀察者模式把本身變動的消息傳遞出去,可是是傳給Presenter而不是View。Presenter獲取到Model變動的消息之後,經過View提供的接口更新界面。
優勢:
缺點:
Passive View模式,該模式下View很是Passive,它幾乎什麼都不知道,Presenter讓它幹什麼它就幹什麼。Supervising Controller模式中,Presenter會把一部分簡單的同步邏輯交給View本身去作,Presenter只負責比較複雜的、高層次的UI操做,因此能夠把它當作一個Supervising Controller
Supervising Controller模式下的依賴和調用關係:
Supervising Controller用得比較少
MVVM能夠看做是一種特殊的MVP(Passive View)模式,或者說是對MVP模式的一種改良。
MVVM表明的是Model-View-ViewModel,ViewModel的含義就是 "Model of View",視圖的模型。它的含義包含了領域模型(Domain Model)和視圖的狀態(State)。
在圖形界面應用程序當中,界面所提供的信息可能不只僅包含應用程序的領域模型。還可能包含一些領域模型不包含的視圖狀態,例如電子表格程序上須要顯示當前排序的狀態是順序的仍是逆序的,而這是Domain Model所不包含的,但也是須要顯示的信息。
能夠簡單把ViewModel理解爲頁面上所顯示內容的數據抽象,和Domain Model不同,ViewModel更適合用來描述View。
MVVM的依賴關係和MVP依賴,只不過是把P換成了VM。
MVVM的調用關係和MVP同樣。可是,在ViewModel當中會有一個叫Binder,或者是Data-binding engine的東西。之前所有由Presenter負責的View和Model之間數據同步操做交由給Binder處理。你只須要在View的模版語法當中,指令式地聲明View上的顯示的內容是和Model的哪一塊數據綁定的。當ViewModel對進行Model更新的時候,Binder會自動把數據更新到View上去,當用戶對View進行操做(例如表單輸入),Binder也會自動把數據更新到Model上去。這種方式稱爲:Two-way data-binding,雙向數據綁定。能夠簡單而不恰當地理解爲一個模版引擎,可是會根據數據變動實時渲染。
總結: MVVM把View和Model的同步邏輯自動化了。之前Presenter負責的View和Model同步再也不手動地進行操做,而是交由框架所提供的Binder進行負責。只須要告訴Binder,View顯示的數據對應的是Model哪一部分便可。
MVVM 前端框架有: angular、vue.js
優勢:
缺點: