參考:
web開發的MVVM模式:http://www.cnblogs.com/dxy198...
MVC,MVP 和 MVVM 的圖示 - 阮一峯:http://www.ruanyifeng.com/blo...
界面之下:還原真實的MV*模式:https://segmentfault.com/a/11...html
View (視圖層)。它是提供給用戶的操做界面,是程序的外殼。web
Model(數據層),也就是程序須要操做的數據或信息,是整個系統的核心部分。segmentfault
Controller(控制層/邏輯層),它負責根據用戶從"視圖層"輸入的指令,選取"數據層"中的數據,而後對其進行相應的操做,產生最終結果。mvc
-View 當Model變動了之後,會經過觀察者模式(Observer Pattern)通知View;View經過觀察者模式收到Model變動的消息之後,會向Model請求最新的數據,而後從新更新界面框架
view : 用戶產生的行爲(經過DOM事件)
Controller: 視圖行爲傳遞到了邏輯層,邏輯層對數據進行處理(好比對錶單進行正則校驗)、以及一些其餘的邏輯處理。再調用Model相應的方法,更新數據。mvvm
低耦合性、重用性高,應對每一個組件的變化性好,便於開發,測試與維護。測試
觀察者模式能夠作到多視圖同時更新。spa
存在必定的模糊性雙向綁定
View 很是薄,不部署任何業務邏輯,稱爲"被動視圖"(Passive View),即沒有任何主動性,而 Presenter很是厚,全部邏輯都部署在那裏server
MVP 隔離了MVC中的 M 與 V 的直接聯繫後,靠 Presenter 來中轉,因此使用 MVP 時 P 是直接調用 View 的接口來實現對視圖的操做的,這個 View 接口的東西通常來講是 showData、showLoading等等。M 與 V已經隔離了,方便測試了
因爲Presenter能夠副作用於View,這樣View的渲染有可能就放在了Presenter中,因此View和Presenter的交互會過於頻繁。若是Presenter過多地渲染了View,每每會使得它與特定的View的聯繫過於緊密。一旦View須要變動,那麼Presenter也須要變動了。
ViewModel和View之間的交互經過數據綁定,而數據綁定能夠實現雙向的交互,這就使得視圖和控制層之間的耦合程度進一步下降
從圖中咱們能夠看到MVVM與MVP最大的不一樣就在於View與ViewModel交互的時候使用了鬆耦合的雙向綁定,而不是像View與Presenter那樣直接交互。ViewModel做爲View的數據映射,一般View上有什麼屬性,ViewModel上也會存在相應的一個屬性,這兩個屬性經過事件實現了雙向的綁定,常見的MVVM框架都替咱們完成了這樣的綁定過程。