具有多个LiveData和用例的ViewModel

问题描述 投票:0回答:1

我目前正在尝试为Fragment制作一个viewmodel。我的方法是为一个片段使用一个viewmodel。我有几个不同场景的用例。拿书,获取有关书籍的信息。所有这些用例都发生在一个片段中。现在我创建了一个ViewModel,它有3个UseCases,彼此独立,还有3个相应的LiveDatas。

我想知道这是不是一个好习惯。有什么建议?

class GetBooksViewModel
@Inject constructor(private val getBooksUseCase: GetBooksUseCase,
private val getBooksListsUseCase: GetBooksListsUseCase,
private val getInfoByBookUseCase: GetInfoByBookUseCase) :
    BaseViewModel() {

var books: MutableLiveData<java.util.LinkedHashMap<String, Book?>> = MutableLiveData()
var bookLists: MutableLiveData<List<BookList>> = MutableLiveData()
var infos: MutableLiveData<List<BookInfo>> = MutableLiveData()

//methods for fetching data will be below

fun getBooks() =
getChannelsUseCase() {
  it.either(::handleFailure, ::handleGetBooksUseCase)
}

private fun handleGetBooksUseCase(response: 
 java.util.LinkedHashMap<String, Channel?>) {
this.books.value = response
}  

里面片段

getBooksViewModel = viewModel(viewModelFactory) {
  observe(books, ::getBooks)
  observe(booksLists, ::getBooksLists)
  observe(bookInfos, ::doSomethingWithInfos)
  failure(failure, ::handleFailure)
}
android kotlin viewmodel android-lifecycle android-livedata
1个回答
0
投票

可以使用组合模型代替三种不同的modelsliveData,如下所示: -

class CombinedModel( var map : MutableLiveData<java.util.LinkedHashMap<String, Book?>, var books : MutableList<BookList>, var infos = MutableList<BookInfo> )

而liveata可以是: -

var response: MutableLiveData<CombinedModel>

因此,只有一个Observer逻辑可以处理活动中的所有三个数据

© www.soinside.com 2019 - 2024. All rights reserved.