代码重构:全局数据

举报
孙小北 发表于 2022/04/24 23:58:13 2022/04/24
【摘要】 代码重构:全局数据

什么是全局数据(Global Data)

  • 定义:类变量和单例等可以在代码库的任何一个角落修改的数据

  • 影响:可以在任何位置进行修改,在使用过程中可能出现意想不到的值,并且没有任何机制可以探测出哪段代码进行了修改,导致定位困难

  • 改进目标:降低代码耦合性,保持代码清晰,维护简单,降低由于对全局数据随意的改变引发bug的风险

  • 方法:封装变量,提炼函数

代码案例:类的静态属性

代码背景

  • ClassStudentsInfo类有两个public静态变量,classStudentsInfo用于存放班级和学生信息;classNumUpLimit用于保存班级的数量上限

  • ClassManage类主要是用于管理班级信息;

症状/问题

  • 虽然我们的意图是想要通过ClassManage类来对这两个变量进行统一管理,但是由于是全局变量,我们可以在系统中的任何位置对其访问并修改。

坏味道影响

  • 在main函数中无意间修改了全局变量classNumUplimit的值,这将导致后续添加操作失败。

  • 在someProcess函数中本意是要调用局部变量classStudentInfo,由于和全局变量classStudentsInfo过于相似,无意间调用全局变量,最终导致了意想不到的错误。

  • 封装变量

先把对全局变量的操作搬移到一个类中,然后把全局变量变为private,将对静态变量的访问都封装在一个类中,从而消除全局变量; 对于外部不需要访问的全局数据可以直接封装成private或常量。

总结

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。