什么是設(shè)計模式?
好吧伴郁,在討論 MVVM 或其他設(shè)計模式之前焊傅。首先狐胎,為什么我們需要這些設(shè)計模式,什么是設(shè)計模式暴浦?
設(shè)計模式是您編寫項(xiàng)目的一種方式
假設(shè)您正在構(gòu)建一個項(xiàng)目,并且您希望確保隨著項(xiàng)目以最有效的方式最有效地增長,或者您希望降低代碼庫的復(fù)雜性纷铣,那么您可能正在尋找一種設(shè)計模式程腹,也許您需要它來使用它。
您不需要在簡單的應(yīng)用程序中添加設(shè)計模式见转,在這種情況下使用數(shù)據(jù)和視圖應(yīng)該沒問題。
此外乘客,如果您剛剛開始開發(fā)牡直,您可以進(jìn)一步了解這些內(nèi)容。
MVVM
MVVM 是一種有意義的設(shè)計模式阔加!
- 為了簡單起見饵史,這就是 MVVM 的含義:
MVVM = Model-View-ViewModel
Model
Model通過多個類/對象表示應(yīng)該存在于您的應(yīng)用程序/項(xiàng)目中的數(shù)據(jù),您可以稍后通過 ViewModel 訪問這些數(shù)據(jù)。
現(xiàn)在可以從任何地方檢索這些數(shù)據(jù),它可能來自 API、數(shù)據(jù)庫或任何東西。
在 Android Dev 的上下文中也稱為存儲庫兼丰。
在模型對象/類的情況下,核心是您選擇的任何數(shù)據(jù)(字符串握爷、其他數(shù)據(jù)或其他)姑曙,因?yàn)樗c它聯(lián)網(wǎng)。
你的“Model”應(yīng)該怎么做?
也稱為存儲庫
不應(yīng)該知道除了 kotlin 中的數(shù)據(jù)類或其他網(wǎng)絡(luò)東西之外的任何東西择浊。
所有業(yè)務(wù)邏輯都應(yīng)該在這里完成(網(wǎng)絡(luò)或其他東西)戴卜,ViewModel 或其他人可以從中訪問您的“模型”中的數(shù)據(jù)。
看法
您的任何項(xiàng)目的UI都被視為“View”
如果您正在使用 xml+kotlin || xml+java 然后 XML 可以被視為此處的View琢岩,或者如果您正在使用 Jetpack Compose投剥,那么可組合函數(shù)可以被視為此上下文中的“View”。
View從不直接包含數(shù)據(jù)担孔,它們會從 ViewModel 或其他獲取數(shù)據(jù)江锨。
你的“View”應(yīng)該做什么?
所有與你的 UI 相關(guān)的邏輯都應(yīng)該只在這個特定的層中完成糕篇,如果你正在使用 Jetpack Compose啄育,你只需要在可組合的函數(shù)中編寫你的 UI 相關(guān)的東西。
應(yīng)該能夠與 ViewModel 聊天以從您將更新 UI 的 ViewModel 訪問數(shù)據(jù)拌消。
ViewModel
ViewModel 類旨在以生命周期意識的方式存儲和管理與 UI 相關(guān)的數(shù)據(jù)挑豌。ViewModel 類允許數(shù)據(jù)在配置更改(例如屏幕旋轉(zhuǎn))后繼續(xù)存在。
- ViewModel 通過 Model 處理 UI 所需的數(shù)據(jù)墩崩,它負(fù)責(zé) UI 的狀態(tài)氓英。
在 ViewModel 的情況下,它的網(wǎng)絡(luò)(聊天)是 UI 和Model鹦筹。
你的“ViewModel”應(yīng)該做什么铝阐?
確保“ViewModel”不知道您可以從中訪問來自任何其他 UI 文件的數(shù)據(jù)的 UI 內(nèi)容盛龄。
ViewModel 應(yīng)該知道“模型”|| “存儲庫”饰迹,您可以從中從“模型”中獲取所需的數(shù)據(jù)|| “存儲庫”,以便 UI 可以從您的 ViewModel 中獲取該數(shù)據(jù)余舶。
深入了解 MVVM
看一下這張圖片啊鸭,了解我們正在嘗試使用 MVVM 實(shí)現(xiàn)的目標(biāo):
“ViewModel”和“Model”之間的關(guān)系
看看這張圖片,了解ViewModel和Model到底做了什么:
- 模型應(yīng)該只響應(yīng) ViewModel 請求的結(jié)果匿值。
“View”和“ViewModel”之間的關(guān)系
看看這張圖片赠制,了解View和ViewModel到底做了什么:
- UI 可以從 ViewModel 訪問數(shù)據(jù),并可以相應(yīng)地更新視圖模型數(shù)據(jù)挟憔。
為什么選擇 MVVM钟些?
根據(jù)我的經(jīng)驗(yàn),MVVM 幾乎解決了代碼庫中的一團(tuán)糟绊谭。您可以清楚地了解自己在做什么以及正在發(fā)生什么政恍。使用 Retrofit + MVVM 將是一個很好的組合,它在處理網(wǎng)絡(luò)操作時為您提供了很多您想要的靈活性达传。
MVVM 清楚地將這些東西(UI篙耗、邏輯迫筑、其他東西)分解到各自的位置。一般來說宗弯,連接較少的項(xiàng)目結(jié)構(gòu)對擴(kuò)展脯燃、測試等具有很好的兼容性。