Почему LiveData лучше, чем MutableLiveData? - PullRequest
0 голосов
/ 09 февраля 2019

Во многих примерах я вижу, что:

 class DataViewModel{
         val data:LivaData<Int>
             get() = _data 

         private val _data = MutableLiveData<Int>()

    }

Но проще выглядит так:

 class DataViewModel{
         val data = MutableLiveData<Int>()

    }

Итак, зачем нужна более сложная конструкция кода с 2 полями?

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

MutableLiveData - это, по сути, LiveData с открытым доступом к двум методам setValue() и postValue() для изменения этих данных.

Следовательно, MutableLiveData необходимо, если вы планируете изменить значения LiveData.

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

Следовательно, для MutableLiveData мы обычно используем геттер, чтобы получить его родительскую форму, которая является LiveData.

Получив только LiveData, мы можем гарантировать, что те, кто обращается к объекту LiveData, могут только читать значения, хранящиеся в нем, без возможности их изменения.

В некотором смысле, это просто концепция того, почему вы должны использовать закрытые переменные с геттерами.

0 голосов
/ 09 февраля 2019

Это практика, предназначенная для ограничения изменения значения вне класса.

LiveData только для чтения.MutableLiveData, как следует из названия, позволяет изменить значение, которое оно содержит.

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

Предоставление возможности изменять содержимое data извне DataViewModel класса может затруднить отладку и рассуждать о том, откуда поступает содержимое data вв любой момент времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...