MVC, MVP, MVVM

參考:https://shenlvmeng.github.io/blog/2017/05/12/Frontend-FAQ-part1/

框架模式不是一門寫代碼的學問,而是一門管理與組織代碼的學問。其本質是一種軟件開發(fā)的模型。與設計模式不同,設計模式是在解決某類特定問題時總結抽象出的公共方法,是方法論的范疇,一種框架模式往往使用了多種設計模式,且和技術棧有耦合的關系。

視圖(View)從本質上講是數(shù)據(jù)在圖像上的一種體現(xiàn)和映射。用戶在操作圖像時可以達到操作數(shù)據(jù)的目的,在數(shù)據(jù)更改后,需要重新將數(shù)據(jù)映射到視圖上。這實際上就是MVC的出發(fā)點。


image.png
  • View: 放置視圖相關的代碼,原則上里面不應該有任何業(yè)務邏輯。
  • Controller: 放置視圖與模型之間的映射,原則上這里應該很薄,他只放一些事件綁定相關的代碼(router),但并不實現(xiàn)真正的功能,他只是一個橋梁。
  • Model: 這里的model不是說實體類,它是主要實現(xiàn)業(yè)務邏輯的地方。

開發(fā)流程是先創(chuàng)建視圖組件,再將之關聯(lián)到Model上,通過View修改Model中的值時,Model會觸發(fā)綁定在之上的所有View的更新。Backbone是個MVC典型的例子。這么做部分分離了視圖和邏輯。但是,在情況復雜時,Model的代碼量將會大大膨脹。

MVP因此而生,其中Presenter(分發(fā)器)代替了原來的Controller,分擔了Model的部分功能。針對上面的問題,Presetner隔斷了Model和View,當M改變時,會通知P去更新視圖。業(yè)務邏輯和綁定邏輯從V和M中分離出來到P中。使得MVP三方分工更加鮮明。絕大多數(shù)的PHP框架都是MVP類型的。

image.png

MVVM是Model-View-ViewModel的縮寫。在MVVM中,View和ViewModel是雙向或單向數(shù)據(jù)綁定的關系。當ViewModel反應了Model中的數(shù)據(jù)模型,并綁定到視圖屬性上,反過來,視圖屬性變化后也會通過ViewModel影響Model。React,Vue這些流行的前端框架都是MVVM類型的。

image.png

不管是MVC還是MVP或MVVM,他們都是數(shù)據(jù)驅動的。核心上基于M推送消息,V或P來訂閱這個模型。使用者需要維護的不再是UI樹,而是抽象的數(shù)據(jù)。當UI的狀態(tài)一旦多起來,這種框架模式的優(yōu)勢就很明顯了。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容