繁体   English   中英

带有Android架构组件的MVVM

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM