MVP模式和MVVM模式

MVP模式

模型-視圖-表示器,也就是MVP模式。是mvc模式的一種衍生模式,專一於改進表示邏輯。angularjs

與MVC不一樣,來自view的調用將委託給presenter(表示器),表示器經過接口與view對話。瀏覽器

MVP中的view是被動的,裏面包含一點代碼邏輯或者零邏輯,咱們專業的說:這個view是很輕的。架構

MVP的原理:view進行請求,表示器執行任何與用戶請求有關的工做,並將數據回送給它們。表示器檢索數據而且操做數據,而且肯定應該如何在view中顯示這些數據。model模型改變時,是表示器收到通知,而後更新view,所以表示器要訂閱model。在這種模式中,沒有直接數據綁定的概念了。mvc

具備很是複雜的view和大量用戶交互的應用程序可能不適合MVC模式,由於這樣會依賴多個控制器。可是在mvp中,全部這些複雜的邏輯能夠封裝在一個表示器中,這能夠大大簡化維護工做。mvvm

Backbone既能夠理解成mvc模式,也能夠理解成mvp模式,咱們暫且把backbone歸結爲mv*模式。接口

MVVM模式

模型-視圖-視圖模型是一種基於MV*的架構模式,它試圖更清晰的將用戶界面開發從應用程序的業務邏輯與行爲中分離。事件

爲此,不少這種模式的實現都要利用聲明式數據綁定來實現將view工做從其餘層分離。backbone

這有助於在同一個代碼庫中UI和開發工做的同時進行。UI開發人員在HTML編寫中,編寫與viewmodel的綁定,業務邏輯的開發人員編寫model和viewmodel。開發

MVVM中的model同步

model保存着信息,可是一般不處理行爲,它們不會格式化信息或影響數據在瀏覽器中顯示的方式。數據格式化是由view來處理的,而行爲被認爲是業務邏輯,應該封裝在與model交互的另外一層中viewmodel中。

MVVM中的view

view實際上僅僅是與用戶進行交互的。可是MVVM中的view包含數據綁定,事件和行爲,而且須要對viewmodel有了解。雖然,這些東西均可以被映射到屬性中,但view仍然負責處理viewmodel的事件。

咱們要牢記:view並不負責處理狀態,它僅僅是讓狀態與viewmodel保持同步。

MVVM中的viewmodel

能夠將viewmodel做爲一個專門的controller,它將model信息轉變爲view信息,同時還將命令從view傳遞到model。

view和viewmodel之間經過數據綁定和事件進行通訊。

view處理本身的用戶界面事件,必要時將它們映射到viewmodel。

model和viewmodel上的屬性經過雙向數據綁定進行同步和更新。

viewmodel能夠爲了數據綁定而暴露model或model屬性,也能夠包含接口,用於獲取和操做view中暴露的屬性。

總結:mvp和mvvm都是mvc的衍生品。

在mvc中,view位於架構之上,與controller相鄰,model位於controller之下,所以view瞭解controller,controller瞭解model。view能夠直接訪問model。

在mvp中,controller的做用被presenter所替代。表示器與view位於同一位置,表示器監聽view和model的事件。

在mvvm中,咱們能夠建立model特定於view的子集,也就是說,咱們無需向view暴露整個model。view能夠綁定到viewmodel上的屬性,而屬性會將model所包含的數據暴露給view。

在咱們實際的開發中,是使用MV*模式的backbone仍是使用MVVM模式的angularjs,Backbone的優點在於它易於與RESTful服務相集成。而angularjs重點關注自動化UI綁定。我的發現angularjs更適用於小型應用程序,Backbone適合建立大型應用程序。可是仁者見仁智者見智,具體狀況具體對待。

 

 

 

 

加油!

相關文章
相關標籤/搜索