Почему мы возвращаем живые данные из хранилища?(MVVM Android) - PullRequest
0 голосов
/ 27 сентября 2019

Многие примеры возвращают LiveData из хранилища в ViewModel

public class Repository{

    private fun getText(): LiveData<String> = FakeDataBase.text
}

Но имеет ли это значение, если мы просто возвращаем String и устанавливаем возвращенные данные в LiveData в ViewModel?

Например, когда мы используем Retrofit, мы получаем объект Call обратно и в основном мы приводим объект Call в LiveData со специальными классами.Таким образом, мы можем просто пропустить шаг и получить значение из Call Object, вернуть его в ViewModel и установить значение в LiveData в ViewModel

Ответы [ 2 ]

0 голосов
/ 27 сентября 2019

Ответ лежит на парадигме функционального программирования.В более сложных случаях вы хотите начать применять операторы к этому результату, который вы только что получили.Допустим, вы хотите получить данные из другой службы на основе вашего результата, а затем добавить успех в конце.В функциональном стиле это будет выглядеть так:

`repo.fetchResult ()

.flatMap {repo2.fetchSecondResultById (it)}

.map {it.concat ("success ")}`

Это простой пример, который может ухудшиться в зависимости от вашего бизнеса.Конечно, в функциональных библиотеках гораздо больше операторов, которые могут помочь в более сложных случаях.Теперь, когда приходит LiveData. LiveData была попыткой Google сделать реактивную реализацию.Но позже они поняли, что RxJava использовался настолько интенсивно, что решили не продолжать эту работу.В то же время Kotlin набирал популярность в Android.Kotlin поставляется с Coroutines and Flow, который также является другой реактивной библиотекой.Тогда Google, чтобы не фрагментировать экосистему, еще больше решил отказаться от усилий LiveData, и они просто остаются в старых образцах или когда вы хотите доставить событие из ViewModel в View.

Но усилия по созданию LiveData с возможностью цепочкиили функциональный отдых на море.Используйте Flow или RxJava.Ваш репо должен вернуть Single, Observable или Flow.

0 голосов
/ 27 сентября 2019

Многие примеры, которые я вижу вокруг, не используют LiveData для связи из репозитория обратно в ViewModel, в том числе на примерах архитектуры Google:

Чертежи архитектуры Android v2

Все чаще и чаще я вижу людей, упаковывающих данные в пользовательские классы результатов, подобные приведенным в этом примере.

Таким образом, нет правильного ответа на ваш вопрос, это будет зависеть от того, что вы хотитеделать.LiveData - это все о наблюдаемом шаблоне (с поддержкой жизненного цикла), есть ли что-то, что публикует значения в этой LiveData?Или вы просто делаете синхронные операции (вы упомянули вызовы дооснащения)?Если это последний случай, вы можете просто вернуть строку.

...