[英]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.