urlname
type
Post
password
SyncToConfluence
category
学习笔记
date
Nov 27, 2025
slug
cd743561-c608-48ef-98d6-dd8057f40649
icon
Button
catalog
summary
tags
学习笔记
编程基础
专业能力
代码质量
软件工程
代码重构
cover
Status
BusyTime
Status 1
status
Published
重新组织数据 专注于改善程序中数据结构和变量的管理,以消除混乱、冗余以及因引用与值对象混淆而导致的 Bug。
技巧(中文/英文) | 核心动机与解释 | 做法概览 | 示例/说明 |
拆分变量 (Split Variable) | 消除一个变量在不同时段被用于 多个不同用途 的情况。这会导致代码阅读困难,变量承担多个责任应被分解。典型的例外是“循环变量”和“结果收集变量”。 | 识别承担多重责任的变量。为每个责任创建新的、不可修改的变量。逐步替换旧变量,并用 变量改名 赋予新变量更合适的名称。 | 一个变量 temp 先用于保存周长计算结果,后又用于保存面积计算结果,应拆分为 perimeter 和 area 两个常量。 |
字段改名 (Rename Field) | 数据结构是理解程序行为的关键。当对数据的理解加深或程序用途改变时,有必要改变字段名称,使其保持整洁并清楚表明用途。对于类,通常要修改取值/设值函数。 | 确保记录被封装(如使用 封装记录)。在对象内部对私有字段改名,并调整内部访问函数。对访问函数运用 函数改名。 | 将组织常量中的 name 字段改名为 title,以更好体现其在上下文中的意义。 |
以查询取代派生变量 (Replace Derived Variable with Query) | 消除那些可以很容易地 随时计算出来 的变量(派生变量)。可变数据是错误源头之一,消除派生变量能避免“源数据修改时忘了更新派生变量”的错误。 | 识别所有对派生变量的更新点。新建一个查询函数计算该值。使用 引入断言 确保变量和计算函数始终给出相同的值。修改读取该变量的代码,令其调用新函数。 | 类中的 _production 字段是根据 _adjustments 累加得到的,应该被计算函数取代,避免重复存储和不一致性。 |
将引用对象改为值对象 (Change Reference to Value) | 如果对象是 不可变的,并且其相等性应该基于 值 而非引用来判断。值对象更容易理解和处理,因为它们是不可变的,可以安全地在程序各处复制和传递。 | 检查目标对象是否可修改为不可变对象。使用 移除设值函数 去掉所有设值函数。提供一个基于值的相等性判断函数。 | 将 TelephoneNumber 对象改为值对象。原本修改 areaCode 的操作需要改为创建并替换整个 TelephoneNumber 对象实例。 |
将值对象改为引用对象 (Change Value to Reference) | 当多个对象需要 共享一个对象,并希望 修改对共享对象的修改 能被所有引用者看到时。 | 确保引用对象能够被外部访问。修改创建逻辑,使其共享引用,而不是创建值对象。确保引用对象的相等性基于 引用 判断。 | 多个订单对象应该共享同一个 Customer 引用,以便对客户信息的修改能体现在所有订单中。 |
总结
“重新组织数据”的重构技巧强调保持数据的 清晰度、一致性 和 不可变性(当适用时)。通过这些技巧,程序员能够控制数据的作用域,避免一个变量承担多重责任导致的混乱,并通过区分引用对象和值对象来简化并发和分布式系统中的数据管理。
这些重构工作旨在从根本上 消除可变数据 带来的丑陋耦合和 Bug 来源,从而提高软件的内部质量和开发效率。
- Author:CoderWdd
- URL:https://www.wuinsights.top//article/cd743561-c608-48ef-98d6-dd8057f40649
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts