簡體   English   中英

帶有Android架構組件的MVVM

[英]MVVM with Android Architecture Components

我正在探索新的Android架構組件,並希望將其實現到Android應用程序中。 我是MVVM的堅定者,因為我在iOS開發中使用范例。 閱讀了Google提供的Android體系結構組件指南: https//developer.android.com/topic/libraries/architecture/guide.html

我只有幾個問題......

在上面提到的指南中,Google使用訪問這些Web服務API的UserRepository類 - 如果應用程序中只有一個屏幕需要來自REST API的數據,它們會繼續使這個類成為Singleton ,這可能很好。

我擔心的是這個; 谷歌似乎主張需要在每個ViewModel的基礎上創建一個存儲庫類。 這聽起來非常錯誤,因為在應用程序中有如此多的Singlton課程。 如果我們有10個屏幕,有10個ViewModel--每個都需要自己的Repository module - 那么我們的應用程序中就有10個單例。 從iOS開發的角度來看,擁有這么多是錯誤的。

解決方案是使用一個具有公共方法的中介(Repository)類,公開API以從REST API獲取數據。 Web服務部分將屬於自己的類。 這樣,我們就可以很好地分離關注點。

是最佳實踐,擁有一個存儲庫類,每個ViewModel - 或者每個應用程序有一個? 我不是百分百肯定的。

最后,我對Room有同樣的擔憂 - 谷歌是說我們在每個ViewModel基礎上創建一個數據庫,或者每個應用只創建一個數據庫?

我不認為架構指南建議為每個ViewModel創建一個單獨的存儲庫類。 在顯示的示例中,Google使用名為Dagger的庫將單例存儲庫類注入ViewModel。 通常,最佳做法是將存儲庫(或管理器)拆分為功能。 例如,UserRepository負責所有與用戶相關的api調用。

如果將此存儲庫轉換為可以在任何ViewModel中注入的單例,則任何ViewModel現在都可以訪問該特定存儲庫。

快速查看房間后,我找到了這個小片段( 鏈接 ):

注意 :在實例化AppDatabase對象時應遵循單例設計模式,因為每個RoomDatabase實例都相當昂貴,並且您很少需要訪問多個實例。

這對我來說意味着您可以像使用存儲庫類一樣實現RoomDatabase。 只需將它們作為單例注入到ViewModel中,這樣就不需要擁有同一數據庫的多個實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM