【发布时间】:2017-06-17 20:11:00
【问题描述】:
Android Room 文档说我们在实例化 AppDatabase 对象时应该遵循单例设计模式。
我正在考虑它,我想知道是否建议将 AppDatabase 类放在我的 Application 类中。或者如果我可以为此使用 Kotlin 单例。
假设我有一个名为 CarroDAO 的 DAO 和作为 RoomDatabase 的类 CarrosDatabase。
可以使用 Kotlin 对象/单例创建 DatabaseManager 类吗?
object DatabaseManager {
private var dbInstance: CarrosDatabase
init {
val appContext = MyApplication.getInstance().applicationContext
dbInstance = Room.databaseBuilder(
appContext,
CarrosDatabase::class.java,
"mybd.sqlite")
.build()
}
fun getCarroDAO(): CarroDAO {
return dbInstance.carroDAO()
}
}
所以我可以像这样得到 DAO 类:
val dao = DatabaseManager.getCarroDAO()
【问题讨论】:
-
我建议您使用依赖注入框架来为您处理单例。像这样,您可以控制实例的生命周期。
-
这是一道设计题,不是代码题。看起来您很清楚如何创建单例以及替代方案是什么。使用单例是否是一个好主意的问题几乎超出了 SO 的范围。
标签: kotlin android-room