MVVM、MVC、MVP之間的區別
MVC、MVP及MVVM都是一種架構模式,都是用來解決介面呈現和邏輯程式碼分離而出現的模式。
MVC
實線表示呼叫,虛線表示事件通知。
Model:是程式需要操作的資料以及資料的處理方法。
View:它是提供給使用者的操作介面。
Controller:頁面的業務邏輯,接收View層傳遞過來的指令,選取Model層對應的資料,進行相應操作。
MVC是單向通訊的。
使用者對View的操作交給了Controller處理,在Controller中響應View的事件呼叫Model的介面對資料進行操作,一旦Model發生變化便通知相關檢視進行更新。
Model和View之間使用了觀察者模式,View事先在此Model上註冊,進而觀察Model,以便更新在Model上發生改變的資料。
缺點:view和model間存在耦合,讓Controller的複用性成了問題,不能多個View共用一個Controller。
MVP
MVP是從MVC進化而來,即Model、View、Presenter
MVP是雙向通訊的。
Presenter完全把Model和View進行了分離,主要的程式邏輯在Presenter裡實現。而且,Presenter與具體的View是沒有直接關聯的,而是通過定義好的介面進行互動,從而使得在變更View時候可以保持Presenter的不變,即重用!
優點:模型檢視分離,可以只修改檢視不影響模型。而且一個presenter可以用於多個檢視不需要改變邏輯。
缺點:Presenter除了基本的業務邏輯外,還有大量程式碼需要對從View到Model和從Model到View的資料進行“手動同步”,這樣Presenter顯得很重,維護起來會比較困難。而且由於沒有資料繫結,如果Presenter對檢視渲染的需求增多,它不得不過多關注特定的檢視,一旦檢視需求發生改變,Presenter也需要改動。
MVVM
MVVM把View和Model的同步邏輯自動化了。以前Presenter負責的View和Model同步不再手動地進行操作,而是交給框架所提供的資料繫結功能進行負責,只需要告訴它View顯示的資料對應的是Model哪一部分即可。
Model
在MVVM中,我們可以把Model稱為資料層,因為它僅僅關注資料本身,不關心任何行為(格式化資料由View的負責),這裡可以把它理解為一個類似json的資料物件。
View
和MVC/MVP不同的是,MVVM中的View通過使用模板語法來宣告式的將資料渲染進DOM,當ViewModel對Model進行更新的時候,會通過資料繫結更新到View。
ViewModel
與MVP不同的是,沒有了View為Presenter提供的介面,之前由Presenter負責的View和Model之間的資料同步交給了ViewModel中的資料繫結進行處理,當Model發生變化,ViewModel就會自動更新;ViewModel變化,Model也會更新。
優點:由於資料繫結,不再需要手動同步資料,可以專注於業務邏輯和資料的開發。