为什么在使用 LiveData 时我应该在 ViewModel class 中双重声明一个变量?

Why should I double declare a variable in a ViewModel class when using LiveData?

现在我正在学习一个教程,其中我正在开发一个简单的游戏应用程序,试图理解和使用 MVVM 应用程序架构。在我的 ViewModel class 中,我有一个包含玩家得分的字段。

分数变量声明如下:

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

现在,在我的 UI 控制器 class 中,我观察到的分数是这样的:

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

所以,我的问题是为什么我需要第二次申报成绩?我就不能有一个

val score = MutableLiveData<Int>()

并像上面那样观察?我试过了,效果很好。

它会起作用的。这样做的目的是确保对该变量的更改仅发生在一个地方,即您的 ViewModel。这只是人们遵循的一种模式,可以让您更轻松地调试并确保 app/view 的状态正确。我在这里找到了一个 source from Google,不过我敢肯定还有很多