💬 Comments(注释过多)
🧾 症状
🧠 问题原因
- 作者意识到代码不易懂,靠注释来“掩盖”结构不清的问题。
🛠️ 应对方法
- 用好名字代替注释:好名字胜过好注释
- 用
提取变量
拆解复杂表达式。 - 用
提取方法
将代码块抽出来,方法名直接体现注释内容。 - 如果方法名仍不够清晰,使用
重命名方法
。 - 需要说明状态约束时,使用
引入断言
。
✅ 收益
🔁 Duplicate Code(重复代码)
🧾 症状
🧠 问题原因
- 程序员之间没沟通好,重复造轮子;
- 或者赶工时复制粘贴了代码。
🛠️ 应对方法
场景 | 处理方法 |
---|
同一个类中多个方法重复 | 提取方法 |
同层级两个子类中重复 | 提取方法 + 上移字段 |
构造函数中重复 | 上移构造函数体 |
类似但不完全相同 | 模板方法 |
不同算法做同一事 | 替换为最佳算法 |
不同类中重复 | 提取超类或提取类 |
条件判断中重复执行 | 合并条件表达式或提取方法 |
条件分支中都有相同代码 | 合并重复的条件片段 |
✅ 收益
💤 Lazy Class(懒类)
🧾 症状
🧠 问题原因
- 可能是之前重构后变得空了;
- 也可能是为“将来可能的功能”留的坑,结果没填。
🛠️ 应对方法
- 用
内联类
删除它; - 或者
合并继承结构
把它合并掉。
✅ 收益
📦 Data Class(数据类)
🧾 症状
- 只有字段、getter/setter,没有任何逻辑。
🧠 问题原因
- 只当数据容器用,没有行为逻辑;
- 忽略了“对象应该操作自己的数据”这一点。
🛠️ 应对方法
封装字段
,防止外部随意访问;封装集合
,避免直接操作集合;- 客户端有逻辑的,迁移过来用
提取方法
/ 移动方法
; - 去掉多余访问方法,使用
移除设置方法
或 隐藏方法
。
✅ 收益
🪦 Dead Code(无用代码)
🧾 症状
🧠 问题原因
🛠️ 应对方法
- 用 IDE 找无用代码;
删除参数
、内联类
、折叠继承结构
都可用。
✅ 收益
🧠 Speculative Generality(推测性泛化)
🧾 症状
- 出现了一些“可能将来会用”的类、方法、字段,但现在根本用不到。
🧠 问题原因
🛠️ 应对方法
类型 | 处理方法 |
---|
未用抽象类 | 折叠继承结构 |
多余委托类 | 内联类 |
未用方法 | 内联方法 |
未用参数 | 移除参数 |
未用字段 | 直接删除 |
✅ 收益
⚠️ 可忽略情况
- 开发框架时,保留给“用户未来扩展”的 API 是合理的;
- 删除前确认不是测试代码依赖。