1. 程式人生 > >淺談MVC,MVP,MVVM區別聯絡

淺談MVC,MVP,MVVM區別聯絡

MVC,MVP,MVVM區別聯絡

MVC: Model-View-Controller (模型-檢視-控制器)
MVP: Model-View-Presente (模型-檢視-層現器)
MVVM:Model-View-ViewModel(模型-檢視-檢視模型)

聯絡:

  • MVP是由MVC演變而來,把MVC的V層與Model層解耦,讓View層和Model層通過P層進行資料互動,兩者不互相訪問;
  • MVVM是由MVP演變而來,它採用View和ViewModel雙向繫結; 讓View和ViewModel的變動都會自動反應在各自的層級;使得開發者不用處理接收事件和View的更新工作,由框架的邏輯實現;

檢視化解釋

MVC:
enter image description here

  • View 傳送指令到 Controller
  • Controller 完成業務邏輯後,要求 Model 改變狀態
  • Model 將新的資料傳送到 View,使用者得到反饋

MVP:
enter image description here

  • 各部分之間的通訊,都是雙向的。
  • View 與 Model 不發生聯絡,都通過 Presenter 傳遞。
  • Presenter 可以理解為鬆散的控制器,其中包含了檢視的 UI 業務邏輯,所有從檢視發出的事件,都會通過代理給 Presenter 進行處理;
  • Presenter 也通過檢視暴露的介面與其進行通訊
  • View 非常薄,不部署任何業務邏輯,稱為”被動檢視”(Passive View),即沒有任何主動性,而 Presenter非常厚,所有邏輯都部署在那裡。

MVVM:(巨集觀上與MVP一樣)
enter image description here

  • Model:代表你的基本業務邏輯
  • View:顯示內容
  • ViewModel:將前面兩者聯絡在一起的物件
  • ViewModel在改變內容之後通知binding framework內容發生了改變。然後framework自動更新和那些內容繫結的view

在 MVVM 的實現中,還引入了隱式的一個 Binder 層,而宣告式的資料和命令的繫結在 MVVM 模式中就是通過它完成的。
enter image description here

區別:

MVC 與 MVP 的區別:
MVC中是允許Model和View進行互動的,而MVP中很明顯,Model與View之間的 互動由Presenter完成。
Presenter與View之間的互動是通過介面的。
MVC中V對應的是佈局檔案,MVP中V對應的是Activity。

MVVM與MVP的區別:

它採用雙向繫結(data-binding):View的變動,自動反映在 ViewModel,反之亦然。這樣開發者就不用處理接收事件和View更新的工作,框架已經幫你做好了。

MVVM的好處:

低耦合,可重用,獨立開發(模組化開發,預留介面互動即可),方便測試(可以針對ViewModel來寫測試)

區別和聯絡腦圖:

enter image description here