ViewModel 里的可变数据应自始至终设成 privat

lxf2023-12-18 06:00:02

序言

将运用的页面数据和页面(Activity/Fragment)分离出来能够让你能够更好地遵照我们前面探讨的单一义务标准。activity 和 fragment 负责对主视图和信息制作到屏上,而 ViewModel 是负责存放并处理页面所需要的所有信息。

数据信息自变量从 XXFragment 挪到 XXViewModel

  1. 将它们自变量 scorecurrentWordCountcurrentScrambledWord 挪到 XXViewModel 类。
class XXViewModel : ViewModel() {

    private var score = 0
    private var currentWordCount = 0
    private var currentScrambledWord = "test"
...

一定要注意这种特性只对 ViewModel 由此可见,页面没法对它进行浏览

需要处理该问题,就不可以把这些属性可视性修饰符设成 public,不该让数据可以被其他类别改动。由于外部类很有可能便以不符主视图分析中指定游戏的规则的意料外方法对业务作出变更。外部类很有可能会将 score 改为别的不正确数值。

ViewModel 以内,数据信息应可改动,数据信息应设成 privatevar。但在 ViewModel 以外,数据信息应可载入但并不能改动,因而数据信息可作为 publicval 公布。要实现此个人行为,Kotlin 带来了称之为储备属功能。

储备特性

应用储备特性,能从 getter 回到准确目标以外的一些其他内容。

Kotlin 架构能为每一个特性形成 getter 和 setter。

针对 getter 和 setter 方式,能够更换其中一个方式或与此同时更换2个方式,同时提供自定个人行为。要实现储备特性,必须更换 getter 方式以回到写保护版本数据信息。储备特性实例

private var _count = 0

val count: Int
   get() = _count

举例说明来讲,在运用中,必须应用数据只对 ViewModel 由此可见:

ViewModel 类以内:

  • _count 特性设成 private 且可变性。因而,必须要在 ViewModel 类上对其浏览和调整。国际惯例是为了 private 特性添加下划线作为前缀。

ViewModel 类以外:

  • Kotlin 里的默认设置可视性修饰符为 public,因而 count 是公共属性,可以从页面控制板等其他类别对它进行浏览。因为仅有 get() 方式能被更换,因此此特性不能变并且是写保护情况。当外部类浏览此特性时,他会回到 _count 数值并且其值没法改动。这能够防止外部类私自对 ViewModel 里的应用数据开展危险的变更,但容许外界调用方快速地浏览该应用数据数值。

将储备特性导入到 currentScrambledWord

  • XXViewModel 中,变更 currentScrambledWord 申明以添加一个储备特性。如今,必须要在 XXViewModel 上对 _currentScrambledWord 开展浏览和调整。页面控制板 XXFragment 可以用只读属性 currentScrambledWord 载入该值。
private var _currentScrambledWord = "test"
val currentScrambledWord: String
   get() = _currentScrambledWord
  • XXFragment 中,升级 updateNextWordOnScreen() 方式以应用写保护的 viewModel 特性 currentScrambledWord
private fun updateNextWordOnScreen() {
   binding.textViewUnscrambledWord.text = viewModel.currentScrambledWord
}
  • XXFragment 中,删掉 onSubmitWord()onSkipWord() 方式里的编码。稍候你将完成这个方法。如今,您应该可以出不来不恰当地编译代码了。

留意:勿公布 ViewModel 里的可变性数据项,保证不能从其他类别改动此数据信息。ViewModel 里的可变数据应自始至终设成 private

文中已经参与「」

本站是一个以CSS、JavaScript、Vue、HTML为中心的前端开发技术网址。我们的使命是为众多前端工程师者提供全方位、全方位、好用的前端工程师专业知识和技术服务。 在网站上,大家可以学到最新前端开发技术,掌握前端工程师最新发布的趋势和良好实践。大家提供大量实例教程和实例,让大家可以快速上手前端工程师的关键技术和程序。 本站还提供了一系列好用的工具软件,帮助你更高效地开展前端工程师工作中。公司提供的一种手段和软件都要经过精心策划和改进,能够帮助你节约时间精力,提高研发效率。 此外,本站还拥有一个有活力的小区,你可以在社区里与其它前端工程师者沟通交流技术性、交流经验、处理问题。我们坚信,街道的能量能够帮助你能够更好地进步与成长。 在网站上,大家可以寻找你需要的一切前端工程师网络资源,使您成为一名更加出色的网页开发者。欢迎你添加我们的大家庭,一起探索前端工程师的无限潜能!