iT邦幫忙

2025 iThome 鐵人賽

DAY 7
0

今天會來介紹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 的存在,也不知道資料會如何被使用或顯示

互動流程

  1. View 上進行操作
  2. View 透過資料綁定,將事件通知給 ViewModel
  3. ViewModel 執行相應的邏輯,向 Model 請求資料
  4. Model 執行資料操作,並將結果回傳給 ViewModel
  5. ViewModel 根據回傳的結果,更新自己內部的 LiveData 狀態資料
  6. View 因為正在 observe 這些 LiveData,並且具備生命週期感知能力,它只會在自身處於活躍狀態時,才自動更新 UI

今天就先介紹到這,明天會來介紹MVVM的兩個好幫手,明天見 .w.
https://ithelp.ithome.com.tw/upload/images/20250921/20176154ch5zL1Omdn.png


上一篇
Day6 MVP架構
下一篇
Day8 MVVM架構2
系列文
Android 菜鳥30天從0到1的學習紀錄12
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言