說實在的,我不以爲MVC,MVVM這些框架有什麼難的,直到我想寫一篇文章去系統的闡述它們。我遇到了如下幾個問題,1.不一樣的文章說的南轅北轍 2.沒有一個清晰的大綱和框架分類。因此我查了不少的材料,但願能從本身的角度上用通俗的語言闡述前端框架的演變。
演變目的: 用簡單的方法處理愈來愈複雜的View層
在最開始的時候,View層是很簡單的,甚至都沒有什麼畫面;而隨着信息時代的發展,它變得愈來愈複雜。如今,前端頁面會有不少複雜的交互邏輯和用戶體驗,若是還使用以前老的框架,對View層的操做就會難以維護,這就是前端框架要不斷演變的主要緣由。html
框架分類:討論框架必定要結合應用場景和歷史背景
上世紀70年代,MVC誕生。最初是應用在GUI程序(圖形界面程序)上,而不是WEB程序上——對於這種MVC,咱們稱之爲經典MVC。後來,在WEB程序上的MVC都是經典MVC的變體;並且,WEB程序上後端MVC和前端MVC也會有些許區別。所以,不區分應用場景和歷史背景,就把經典MVC和WEB MVC混作一團是很是不負責任的。前端
另外,無論MVC,MVP,MVVM以及它們諸多的變體MVX,本質上都是三層的結構。git
回想咱們在文章第一部分就着重提到的,演變的最終目的就是爲了適應愈來愈複雜的View層,讓咱們一直記着這句話來看下面的內容。github
第二部分已經提到過了,由於MVC變種衆多,不結合應用場景和歷史背景的討論都是耍流氓。後端
在上世紀70年代,由於沒有操做系統和消息循環,甚至鼠標的光標都須要咱們的UI系統來自行繪製,因此這時候用戶的輸入是由Controller來得到的[1]。Controller得到用戶的輸入以後,去調用相應的Model修改數據,同時修改View響應用戶的輸入。Model的數據修改以後,會通知相關的View。View監聽Model,當收到通知後,就修改樣式。設計模式
調用關係以下[2]:前端框架
咱們能夠看到,WEB MVC和經典MVC本質上是同樣的,一樣都擁有了Controller去修改Model的調用關係。可是,它們之間有兩個區別:架構
優勢:mvc
缺點:框架
感謝前端的前輩們,咱們並無在MVP階段多作逗留,而是大步進入了MVVM階段。其實MVP和MVVM的主要區別就是在因而否有雙向數據綁定。有興趣的能夠看《淺析 MVC, MVP 與 MVVM之間的異同》自行了解。
在3.2咱們實現了一個簡單的MVC,設想一下,如今頁面上不是隻有一個按鈕,而是有1000個按鈕,每一個按鈕還要操做不一樣的DOM對象,由於MVC是沒法組件化的,這時View的邏輯就會變得很是的複雜和難以維護。爲了解決這個問題,MVVM就應運而生了。
用戶與View交互,觸發用戶事件;View根據事件類型調用ViewModel中對應的響應邏輯;而後ViewModel中的響應邏輯在作完適當處理後,會去調用Model層的接口;接口的調用執行,致使Model層數據的變化,進而觸發相應的數據改變事件;事件又被ViewModel模塊監聽到;拿到新的Model數據,ViewModel中的展現邏輯會去修改ViewModel中的狀態數據;ViewModel中狀態數據的改變,最終引發View的狀態變換,完成了此次對用戶事件的響應。
優勢:
缺點: