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的學習紀錄 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言