https://juejin.cn/post/6844903976240939021
一、MVVM是什么?
MVVM分為Model,View,ViewModel 三個部分
Model:數(shù)據(jù)層,包含數(shù)據(jù)實體和對數(shù)據(jù)實體的操作,和MVP的model沒有區(qū)別
View:界面層,對應(yīng)于Activity,XML,負責數(shù)據(jù)顯示以及用戶交互。相比MVP的view,這里面的view視圖數(shù)據(jù)一般是在xml中使用DataBinding進來雙向綁定數(shù)據(jù)的。
ViewModel:關(guān)聯(lián)層,作為中間橋梁 去通知model數(shù)據(jù)層處理數(shù)據(jù)業(yè)務(wù),并將結(jié)果回調(diào)給 UI 層處理 UI 邏輯。ViewModel中只有activity持有vm引用,vm是不持有view的引用的,所以vm的構(gòu)造方法中不能傳入視圖相關(guān)的對象。所以重點在于怎么通知view,可以通過觀察者回調(diào)的方式。但是現(xiàn)在一般是結(jié)合Jetpack來進行view的更新的。
具體的視圖關(guān)系如下圖所示:

二、MVP、MVVM和Jetpack MVVM的區(qū)別
簡單來說,MVP 是基于適配器模式的實現(xiàn),它是在 MVC 模式泛濫的背景下,為了遵循 依賴倒置原則 以便能夠隨時替換 V 和 M 的實現(xiàn)。 也即,本質(zhì)上它并沒有解決代碼耦合的問題(從前 UI 邏輯在 視圖控制器中寫,現(xiàn)在搬到了 Presenter 中寫而已),它的存在只是為了 面向接口編程 以實現(xiàn)依賴倒置。拋開 MVC 的背景,就無法談?wù)?MVP 存在的意義。
MVVM 的本質(zhì)是數(shù)據(jù)驅(qū)動編程,它從本質(zhì)上解決了代碼耦合、實現(xiàn)了關(guān)注點分離:讓 ViewModel 作為中間橋梁 去通知數(shù)據(jù)層處理數(shù)據(jù)業(yè)務(wù),并將結(jié)果回調(diào)給 UI 層處理 UI 邏輯。
Jetpack MVVM 是在 MVVM 模式的基礎(chǔ)上 加入了 軟件工程安全 和 用戶體驗優(yōu)化 的設(shè)計。
例如 Jetpack LifeCycle 能在背后妥善處理 視圖控制器生命周期的 Null 安全問題,而 Jetpack ViewModel 能分治視圖狀態(tài)的托管,使得 UI 發(fā)生重建時 無需重新向后臺請求數(shù)據(jù),這大幅節(jié)省了開銷,讓重建時的視圖加載較以往 更快和更省電。
綜上,MVP 和 MVVM 二者之間沒有任何關(guān)系。MVP 是對 MVC 的升級,而 MVVM 是現(xiàn)代化軟件開發(fā)模式的范例