Почему я должен дважды объявлять переменную в классе ViewModel при использовании LiveData?

#android #kotlin #mvvm

Вопрос:

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

Переменная оценки объявляется следующим образом:

 private val _score = MutableLiveData<Int>()
val score: LiveData<Int>
    get() = _score
 

Теперь, в моем классе контроллера пользовательского интерфейса, я наблюдаю такую оценку:

 viewModel.score.observe(this, Observer { newScore ->
        binding.scoreText.text = newScore.toString()
    })
 

Итак, мой вопрос в том, зачем мне нужна вторая декларация оценки? Разве я не могу просто взять

 val score = MutableLiveData<Int>()
 

и наблюдать за этим, как описано выше? Я пытался, и это работает.

Ответ №1:

Это сработает. Смысл этого в том, чтобы убедиться, что изменения в этой переменной происходят только из одного места, являющегося вашей моделью представления. Это просто шаблон, которому следовали люди, чтобы облегчить вам отладку и убедиться, что состояние вашего приложения/представления правильное. Один источник из Google я нашел здесь, хотя я уверен, что есть еще много других