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