首页 文章

带有Android架构组件的MVVM

提问于
浏览
1

我正在探索新的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 - 我们的应用程序中有十个单身人士 . 从iOS开发的角度来看,拥有这么多是错误的 .

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

是最佳实践,拥有一个存储库类,每个ViewModel - 或者每个应用程序有一个?我不是百分百肯定的 .

最后,对于 Room ,我有同样的担忧 - 谷歌是说我们在每个ViewModel基础上创建一个数据库,或者每个应用只创建一个数据库?

1 回答

  • 3

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

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

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

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

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

相关问题