代码重构:可变数据
【摘要】 代码重构:可变数据
什么是可变数据(Mutable Data)
-
定义:可变数据——对数据的修改经常导致出乎意料的结果和难以发现的Bug。
-
影响:影响可维护性,在一处修改数据,却在另一处造成难以发现的破坏
-
改进目标:应用“数据不可变”:不可变性是强大的代码防腐剂
-
方法:封装变量、拆分变量、提炼函数、移除设值函数、查询取代派生、Builder模式创建不可变对象、引用对象改为值对象、函数式编程等
-
注:并非所有可变类型都是不良的,这里关注描述数据的可变类型
案例代码1
代码背景
-
描述了发票的数据模型;
-
发票有买方、卖方、还有多个明细行;
-
每个明细行有商品名称、单价、数量、税率;
-
票还有总价、税额的概念
症状/问题:数据应有明确含义,“可变”会引入不确定性,“可变”包括:
-
同一变量用作不同目的:如InvoiceLine.setQuantity()方法中的sum变量
-
用public修饰非final成员:
-
有set方法(或其它改变数据的方法)
-
一个字段的值可通过其他字段计算得到
-
对外暴露内部字段的可变引用
改进目标
重构对比
- 一个变量用作不同目的
- 数据类型中,用public修饰非final成员
- 有set方法(或其它改变数据的方法)
- 一个成员变量的值可通过其他字段计算得到
- 对外暴露内部变量的可变引用
改进手法
- 封装变量
- 拆分变量(用提取函数):Ctrl+Atl+M
- 移除设值函数:用内联移除、直接删除(Ctrl+Alt+N、Alt+Del)
- Builder模式创建不可变对象
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)