ViewModel 中的狀態

Kimoji:以 Jetpack Compose 實作一款「心情日記」應用 [22]

John Lu
Sep 25, 2022

--

畫面或 UI state會包含畫面上要顯示的內容 (例如日記清單)。由於這個狀態含有應用程式資料,因此通常連結著 app 架構的其他層

此系列文章是以我的業餘專案: Kimoji 為範例。
這款以純 Jetpack Compose 撰寫的 side project,已經在 Google Play 上架。 歡迎試玩!
📥 立馬下載 | | | 🎟️ 限免兌換碼

UI state可以描述畫面上要顯示的內容,而應用程式邏輯可以描述應用程式的行為,以及如何回應狀態變更。我們撰寫的邏輯有兩種類型: UI 邏輯(或稱 UI 行為),以及事務邏輯。

  • UI 邏輯和「如何顯示」畫面上的狀態變更有關 (例如 navigation 邏輯或顯示 Snackbar )。
  • 事務邏輯則是「如何處理」狀態變更 (例如付款或儲存使用者的設定)。這些邏輯通常位於 domain 或 data layer,不會在 UI layer。

ViewModel 會提供 UI 狀態,並能存取應用程式其他層的事務邏輯。另外 ViewModel 也能在 configuration changes 後繼續保留,所以生命週期比 Composition 要長。ViewModel 可以 follow ActivityFragment,以及 Navigation graph destination 的 lifecycle。

如果想深入瞭解 UI 層架構,請參閱 UI layer 說明文件

注意:ViewModel 並非 Composition 的一部分。因此我們不應該在 ViewModel 裡去持有 composables 內建立的狀態 (例如 remembered value),這樣做可能會導致 memory leaks。

此系列文章是以我的業餘專案: Kimoji 為範例

Kimoji 是一款心情日記 App,讓你用可愛的 emoji 來撰寫你的心情日記。現在就來試試這款設計精美的微日記吧!
📥 立馬下載 | | | 🎟️ 限免兌換碼

--

--

John Lu
John Lu

Written by John Lu

AI Engineer. Innovative and results-driven. Adept at deploying cutting-edge models with high-performance apps. He transforms challenges into practical solutions

No responses yet