ViewModel с несколькими LiveData и вариантами использования - PullRequest
0 голосов
/ 12 марта 2019

В настоящее время я экспериментирую с созданием модели представления для фрагмента.Мой подход заключается в использовании ровно одной модели для одного фрагмента.У меня есть несколько вариантов использования для разных сценариев, напр.чтобы получить книги, чтобы получить информацию о книге.Все эти варианты использования происходят в одном фрагменте.Теперь я сделал ViewModel с 3 независимыми друг от друга вариантами использования и 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)
}

1 Ответ

0 голосов
/ 12 марта 2019

Комбинированная модель может использоваться вместо трех разных 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 логика может позаботиться обо всех трех данных в действии

...