Rob*_*egg 5 android mvvm android-room android-architecture-components
我正在探索新的 Android 架构组件,并希望将其实现到 Android 应用程序中。我对 MVVM 很坚定,因为我在 iOS 开发中使用了该范例。阅读 Google 提供的 Android 架构组件指南: https: //developer.android.com/topic/libraries/architecture/guide.html
我只有几个问题...
在上面提到的指南中,Google 使用访问这些 Web 服务 API 的类 -如果应用程序上只有一个屏幕需要来自 REST API 的数据,那么UserRepository他们继续将此类设为 a ,这可能没问题。Singleton
我关心的是这个;谷歌似乎主张需要在每个 ViewModel 的基础上创建一个存储库类。这对我来说听起来很错误,因为Singlton应用程序中有这么多课程。如果我们有 10 个屏幕,有 10 个 ViewModel(每个视图模型都需要自己的Repository module),那么我们的应用程序中就会有 10 个单例。从 iOS 开发者的角度来看,有这么多是错误的。
解决此问题的方法是使用一个中介器(存储库)类,该类具有公共方法,公开 API 以从 REST API 获取数据。Web 服务部分将位于其自己的类中。这样,我们就可以很好地分离关注点。
每个 ViewModel 有一个存储库类,还是每个应用程序有一个存储库类,这是最佳实践吗?我对此不是100%确定。
最后,我也有同样的担忧Room- Google 是说我们在每个 ViewModel 基础上创建一个数据库还是每个应用程序创建一个数据库?
我不认为架构指南建议为每个 ViewModel 创建一个单独的存储库类。在显示的示例中,Google 使用名为 Dagger 的库将单例存储库类注入到 ViewModel 中。通常,最佳实践是根据功能拆分存储库(或管理器)。例如,UserRepository 负责所有与用户相关的 api 调用。
如果您将此存储库转换为可以注入到任何 ViewModel 中的单例,则任何 ViewModel 现在都可以访问该特定存储库。
快速查看房间后,我发现了这个小片段(链接):
注意:在实例化 AppDatabase 对象时,您应该遵循单例设计模式,因为每个 RoomDatabase 实例都相当昂贵,并且您很少需要访问多个实例。
对我来说,这意味着您可以像使用存储库类一样实现 RoomDatabase。只需将它们作为单例注入到您的 ViewModel 中,这样您就不需要拥有同一数据库的多个实例。
| 归档时间: |
|
| 查看次数: |
2536 次 |
| 最近记录: |