今天會來介紹MVVM架構的部分,會拆成兩天介紹,今天會跟昨天一樣介紹概念,那一樣廢話不多說我們開始ouo
核心概念
-
定義:一種將使用者介面(UI)的狀態與邏輯從 UI 本身分離的架構模式,由 Model、View、ViewModel 組成,並由 Android Jetpack Lifecycle 元件驅動
-
目標:解決 UI 與業務邏輯的緊密耦合,透過資料綁定機制,讓程式碼的可讀性、可維護性與可測試性達到最佳化,並應對Android 系統中常見的配置變更(如螢幕旋轉)
MVVM 意思
View
Activity 或 Fragment,是 LifecycleOwner
-
職責:
-
觀察ViewModel 中的資料變化(通常是 LiveData),並自動更新畫面
- 將使用者操作通知給 ViewModel
-
原則:
- 作為 LifecycleOwner,它在訂閱資料時,會將自己的生命週期提供給 LiveData,確保資料更新只在安全的時機點進行
- 宣告UI 如何對應到 ViewModel 的狀態,而不是等待被動的命令
ViewModel
UI 狀態的管理者,並且是生命週期感知 (Lifecycle-Aware) 的元件
-
職責:
- 接收 View 傳來的事件
- 向 Model 請求或提交資料
- 持有並管理 UI 相關的狀態,例如
isLoading
, userName
……
- 包含顯示邏輯 (Presentation Logic),例如將日期格式化成字串
-
原則:
- ViewModel 不持有 View(Activity/Fragment)的引用,使得 ViewModel 非常容易進行單元測試
-
其生命週期比 View 更長。當螢幕旋轉導致 Activity 被銷毀並重建時,同一個 ViewModel 實例仍然會被保留,確保其中儲存的狀態和資料不會遺失
Model
資料的提供者與管理者
-
職責:
- 提供資料from Database, Network API, Local Cache
- 執行資料的Create, Read, Update, Delete
-
原則:只專注於資料本身, 不知道 ViewModel 的存在,也不知道資料會如何被使用或顯示
互動流程
- 在 View 上進行操作
-
View 透過資料綁定,將事件通知給 ViewModel
-
ViewModel 執行相應的邏輯,向 Model 請求資料
-
Model 執行資料操作,並將結果回傳給 ViewModel
-
ViewModel 根據回傳的結果,更新自己內部的 LiveData 狀態資料
-
View 因為正在
observe
這些 LiveData
,並且具備生命週期感知能力,它只會在自身處於活躍狀態時,才自動更新 UI
今天就先介紹到這,明天會來介紹MVVM的兩個好幫手,明天見 .w.
