数据泥团
概述
数据泥团是代码异味的一种,指相同的数据项(通常是3个或更多)在多个地方反复一起出现的现象。这暗示着应该创建一个新的对象来封装这些相关的数据。
关键内容
- 特征识别:
- 同样的3个以上字段反复一起出现
- 参数总是成对或成组传递
- 类中的字段子集总是一起使用
- 相似的数据结构在多处重复定义
-
数据项之间存在明显的逻辑关联
-
负面影响:
- 逻辑重复,违反DRY原则
- 缺乏抽象,没有封装相关功能
- 难以扩展和维护
- 暗示有隐藏的类应该存在
-
当需要修改相关数据时,多处都需要修改
-
重构策略:
- Extract Class:提取相关的字段和行为到新类
- Introduce Parameter Object:将相关参数封装成对象
-
Preserve Whole Object:传递整个对象而不是分离的值
-
重构示例: ``` // 数据泥团:坐标 (x, y, z) function movePoint(x, y, z, dx, dy, dz) { } function scalePoint(x, y, z, factor) { } function distanceBetween(x1, y1, z1, x2, y2, z2) { }
// 提取 Point3D 类 class Point3D { constructor(x, y, z) { } move(delta) { } scale(factor) { } distanceTo(other) { } } ```
来源
- Martin Fowler — 《重构:改善既有代码的设计》
- 代码异味 — 重构指导书
相关
- 代码异味 — 数据泥团所属的异味类别
- 重构 — 解决方法
- Extract Class — 具体重构技巧
- 对象封装 — 相关概念
- 单一职责原则 — 设计原则