为什么这个示例应用程序中的存储库类是单例的?

ozn*_*cro 5 android android-architecture-components android-jetpack

在此示例应用程序中:https : //github.com/googlesamples/android-sunflower

存储库类(PlantRepository.kt、GardenPlantingRepository.kt)是单例的,注入器实用程序对象(InjectorUtils.kt)也是如此。

当注入器实用程序对象已经是一个时,为什么存储库类是单例的?

Ale*_*sio 4

InjectorUtils是一个单例,因为他们想以静态的方式从代码中的任何地方使用它作为辅助类,并且通过它能够获取一个PlantRepository、一个GardenPlantingRepository和一些工厂。现在,如果您考虑存储库,它们是提供对内存中数据集的快速访问的类(然后可以异步更新),因此没有任何理由随时创建存储库的新实例(这意味着任何时候都会分配新的内存),因为它的方法只是 dao 方法的包装器;事实上,如果您注意到,dao 会在 getInstance() 中传递到此类单例存储库,因此允许包装器方法和 dao 之间的绑定。因此,它们是单例以避免分配新内存,而是传递相同的已分配内存(因为它仅包含包装器)

  • @ArchieG.Quiñones 我想我已经回答了这个问题:是的,“作为一般规则存储库应该是单例”;我不能百分百确定“总是”,但大多数情况确实如此。“存储库保持状态”我不知道你的意思,存储库是无状态的(这就是为什么单例是一个很好的模式),因为存储库状态(此存储库公开的特定数据集)被持久化到数据库(房间,或 sql),因此存储库“状态”只是准备好它的最新快照。您可以在我发布的链接中找到有关架构组件设计的更多信息 (2认同)