![](/img/trans.png)
[英]Clean Architecture: ViewModel with multiple UseCases on Android
[英]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)
}
可以使用组合模型代替这样的三个不同models
和liveData
:
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.