Допустим, у меня есть функция DAO для комнаты getForIdLiveData(id: String)
, которая возвращает LiveData<SomeClass>
.
Безопасно ли (и как это с точки зрения производительности) использовать someClassDAO.getForIdLiveData(id).value
вместо создания дублирующей функции DAO, которая возвращает просто SomeClass
?
Это сэкономило бы тонну шаблонной информациикод (поскольку функции DAO обычно передаются через репозиторий в MVP или MVVM), и он, кажется, работает до сих пор.Я просто не смог найти много информации о возможных будущих осложнениях, которых я (конечно) хочу избежать.
Пример:
Могу ли я использовать это:
В someDataClassDAO
@Query("SELECT * FROM my_table WHERE my_id = :id")
fun getForIdLiveData(id: String): LiveData<SomeDataClass>
В MyRepo
интерфейс
getMyInfoLiveData(id: String): LiveData<SomeDataClass>
В myRepoFactory
, который реализует пользовательский интерфейс MyRepo
@WorkerThread
override fun getMyInfoLiveData(id: String)
= someDataClassDAO.getForIdLiveData(id)
В myViewModel
класс
// Provide LiveData for ongoing UI display
fun provideMyInfoLiveData(id: String) = myRepo.getMyInfoLiveData(id)
// Get some parameter for different id (one time)
fun getOneParameter(id): Long {
val entity = myRepo.getMyInfoLiveData(id).value
return entity.someField
}
Вместо:
В someDataClassDAO
@Query("SELECT * FROM my_table WHERE my_id = :id")
fun getForIdLiveData(id: String): LiveData<SomeDataClass>
@Query("SELECT * FROM my_table WHERE my_id = :id")
fun getForId(id: String): SomeDataClass
В MyRepo
интерфейс
getMyInfoLiveData(id: String): LiveData<SomeDataClass>
getMyInfo(id: String): SomeDataClass
В MyRepoFactory
, который реализуетMyRepo
@WorkerThread
override fun getMyInfoLiveData(id: String)
= someDataClassDAO.getForIdLiveData(id)
@WorkerThread
override fun getMyInfo(id: String)
= someDataClassDAO.getForId(id)
В myViewModel
класс
// Provide LiveData for ongoing UI display
fun provideMyInfoLiveData(id: String) = myRepo.getMyInfoLiveData(id)
// Get some parameter for different id (one time)
fun getOneParameterForId(id): Long {
val entity = myRepo.getMyInfo(id)
return entity.someField
}