Я сейчас пытаюсь реализовать совместное использование состояний (например, в твиттере) в нескольких действиях.Например, совместное использование состояния like в активности списка, а также в операции подробностей.
Моя идея на данный момент состоит в том, чтобы вернуть LiveData из репозитория и подписать его в обоих действиях, которые выглядят как в кеше памяти, реализованном с использованием LiveData.Репозиторий будет как ниже.(Это не настоящий код, но я думаю, легко представить, как он работает)
class PostRepository {
val postCache : MutableLiveData<List<Post>> = MutableLiveData()
fun getAll(): List<Post> {
val posts = source.getAll() // source is something like api or real db
postCache.value = posts
return posts
}
fun like(id: String){
postCache.value.map { post ->
if(post.id == id){
post.like = true
}
}
source.like(id)
}
}
Когда я нахожу в памяти db для документа Room in Room (https://developer.android.com/reference/android/arch/persistence/room/Room#inmemorydatabasebuilder), Я думаю, что этоможет быть полезно использовать Room in-memory db в качестве кеша, так как он может возвращать LiveData и также может уведомлять об обновлении db. Но в документе, похоже, что db in-memory только для тестирования.
Поэтому у меня такой вопрос: может ли Room in-memory db быть хорошим решением для реализации кэша? А если нет, то есть ли лучший способ, чем использовать объект LiveData.