5

我正在探索新的 Android 架构组件并希望将其实现到 Android 应用程序中。当我使用 iOS 开发的范例时,我对 MVVM 非常熟悉。阅读了 Google 提供的 Android 架构组件指南:https ://developer.android.com/topic/libraries/architecture/guide.html

我只有几个问题...

在上面提到的指南中,Google 使用访问这些 Web 服务 API 的类——如果应用程序上只有一个屏幕需要来自 REST API 的数据,UserRepository他们继续制作这个类可能很好。Singleton

我关心的是这个;谷歌似乎提倡需要在每个 ViewModel 的基础上创建一个存储库类。这对我来说听起来很不对,在Singlton应用程序中有这么多课程。如果我们有 10 个屏幕,有 10 个 ViewModel - 每个都需要自己的Repository module- 我们的应用程序中就有 10 个单例。从 iOS 开发人员的角度来看,拥有这么多是错误的。

对此的解决方案是拥有一个具有公共方法的中介(存储库)类,公开 API 以从 REST API 获取数据。Web 服务部分将在其自己的类中。这样,我们就可以很好地分离关注点。

最佳实践是每个 ViewModel 拥有一个存储库类 - 还是每个应用程序拥有一个?我对此不是 100% 确定的。

最后,我也有同样的担忧Room——谷歌是说我们在每个 ViewModel 基础上创建一个数据库,还是每个应用程序只创建一个数据库?

4

1 回答 1

3

我不认为架构指南建议为每个 ViewModel 创建一个单独的存储库类。在显示的示例中,Google 使用名为 Dagger 的库将单例存储库类注入 ViewModel。在功能上拆分存储库(或管理器)通常是最佳实践。例如,UserRepository 负责所有与用户相关的 api 调用。

如果您将此存储库转换为可以注入任何 ViewModel 的单例,则任何 ViewModel 现在都可以访问该特定存储库。

在快速查看房间后,我发现了这个小片段(链接):

注意:在实例化 AppDatabase 对象时,您应该遵循单例设计模式,因为每个 RoomDatabase 实例都相当昂贵,而且您很少需要访问多个实例。

对我来说,这意味着您可以像使用存储库类一样实现 RoomDatabase。只需将它们作为单例注入到您的 ViewModel 中,这样您就不需要拥有同一数据库的多个实例。

于 2017-07-05T14:22:38.010 回答