繁体   English   中英

具有多个LiveData和UseCases的ViewModel

[英]ViewModel with several LiveData and UseCases

我目前正在尝试为Fragment创建视图模型。 我的方法是将一个视图模型仅用于一个片段。 我有几种不同情况下的用例。 获取书籍,以获得有关书籍的信息。 所有这些用例都发生在一个片段中。 现在,我制作了一个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)
}

可以使用组合模型代替这样的三个不同modelsliveData

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

实时数据可能像:-

var response: MutableLiveData<CombinedModel>

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM