前端框架之MVC、MVP、MVVM


一、MVC、MVP、MVVC

  復雜的軟件必須有清晰合理的架構,否則無法開發和維護。為了將業務和視圖的實現代碼分離,目前比較流行三種前端架構:

  MVC = Model-View-Controller

  MVP = Model-View-Presenter

  MVVM = Model-View-ViewModel

  Model 為模型層,主要管理業務模型的數據和行為;

  View 為展示層,其職責就是管理用戶界面。

  三個架構模式目的都是為了解耦 Model 和 View,主要不同點就在於三者實現解耦的方案不同。

二、MVC

  MVC = Model-View-Controller,

  • 視圖(View):用戶界面。
  • 控制器(Controller):業務邏輯
  • 模型(Model):數據保存

  各部分之間的通信方式如下

  View會接收用戶的交互請求並展示數據信息給用戶。在 MVC 里,View 被設計為可嵌套的,使用了組合(Composite)模式來實現。比如,列表視圖(ListView)或表格視圖(TableView)由每個 Item 組成,每個 Item 又可以由圖片、文本、按鈕等組成。View 是傾向於可復用的,因此,在實際應用中,傾向於將 View 開發成相對通用的組件。

  Controller 層主要擔任 Model 與 View 之間的橋梁,用於控制程序的流程。Controller 負責確保 View 可以訪問到需要顯示的 Model 對象數據,並充當 View 了解 Model 更改的渠道。View 接收到用戶的交互請求之后,會將請求轉發給 Controller,Controller 解析用戶的請求之后,數據就會交給對應的 Model。

  Model在前端框架中就是數據的存儲。在傳統后端開發中習慣把業務層歸入Model,而對前端框架來說,通常不這樣划分。

三、MVP

  MVP 模式將 Controller 改名為 Presenter,同時改變了通信方向。

MVP有以下三個特點:

1. 各部分之間的通信,都是雙向的。

2. View 與 Model 不發生聯系,都通過 Presenter 傳遞。

3. View 非常薄,不部署任何業務邏輯,稱為"被動視圖"(Passive View),即沒有任何主動性,而 Presenter非常厚,所有邏輯都部署在那里。

 四、MVVM

  MVVM 模式將 Presenter 改名為 ViewModel,MVP 很相似,最大的不同在於 View 和 ViewModel 之間主要是通過數據綁定的方案來實現交互的。

   MVVM采用雙向綁定(data-binding):View的變動,自動反映在 ViewModel,反之亦然。AngularJS 和 Vue 都采用這種模式,而React采用了單向數據流,屬於MVP架構。  

  要實現數據綁定,通常都采用發布者-訂閱者模式進行實現,但這部分工作如果由開發人員自己來寫代碼實現,其實還是挺復雜的,因此,各大平台都提供了各自的內部實現。比如 Vue 和 AngularJS 自身都實現了數據綁定,Android 目前最主流的方案就是采用 Jetpack,iOS 最常用的方案則是結合 ReactiveCocoa(RAC)實現。

  MVP 和 MVVM 都是為了解決界面和數據的分離問題,兩者只是采用了不同的實現方案。MVP 之間的交互主要是通過接口實現的,其主要弊端就是需要編寫大量接口。而 MVVM 則是通過數據綁定的方式實現交互,雖然其實現需要依賴具體的一些框架工具,但明顯大大減少了開發者需要編寫的代碼量。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM