代码重构
适用场景
- 代码质量改善
- 消除代码坏味道
- 优化代码结构
- 提高可维护性
重构流程
Step 0: 校验任务文档 → Step 1: 识别问题 → Step 2: 确定范围 → Step 3: 编写测试 → Step 4: 小步重构 → Step 5: 验证
Step 0: 校验任务文档
- 确认全流程任务文档存在
- 若缺失,先创建任务文档骨架并补齐流程状态与上下文快照
- 在上下文快照记录“重构中”与一句话范围说明
重构原则
- 小步前进 - 每次只做一个小改动
- 保持功能 - 重构不改变外部行为
- 测试保障 - 有测试覆盖再重构
- 及时提交 - 每个小步骤后提交
同步任务文档:
- 产物清单记录相关测试/报告路径(如有)
- 更新下一步指令为“验证/继续开发”
常见代码坏味道
1. 过长方法
问题: 方法超过 50 行
重构方法: 提取方法
java// ✗ 重构前 public void processOrder(Order order) { // 50+ 行代码... } // ✓ 重构后 public void processOrder(Order order) { validateOrder(order); calculatePrice(order); saveOrder(order); sendNotification(order); }
2. 过大类
问题: 类超过 500 行,职责过多
重构方法: 提取类
java// ✗ 重构前 public class UserService { // 用户管理 + 订单管理 + 支付管理... } // ✓ 重构后 public class UserService { /* 用户管理 */ } public class OrderService { /* 订单管理 */ } public class PaymentService { /* 支付管理 */ }
3. 重复代码
问题: 相同代码出现多处
重构方法: 提取公共方法
java// ✗ 重构前 public void methodA() { // 重复代码块 } public void methodB() { // 重复代码块 } // ✓ 重构后 private void commonMethod() { // 公共代码块 } public void methodA() { commonMethod(); } public void methodB() { commonMethod(); }
4. 过长参数列表
问题: 方法参数超过 4 个
重构方法: 引入参数对象
java// ✗ 重构前 public void createUser(String name, String phone, String email, String address, Integer age, Integer status) {} // ✓ 重构后 public void createUser(UserCreateRequest request) {}
5. 魔法值
问题: 硬编码的数字或字符串
重构方法: 提取常量或枚举
java// ✗ 重构前 if (status == 1) { } if (type.equals("VIP")) { } // ✓ 重构后 if (status == StatusEnum.ENABLE.getCode()) { } if (type.equals(UserType.VIP)) { }
6. 过深嵌套
问题: if/for 嵌套超过 3 层
重构方法: 提前返回、提取方法
java// ✗ 重构前 public void process(User user) { if (user != null) { if (user.isEnabled()) { if (user.hasPermission()) { // 业务逻辑 } } } } // ✓ 重构后 public void process(User user) { if (user == null) return; if (!user.isEnabled()) return; if (!user.hasPermission()) return; // 业务逻辑 }
7. 注释过多
问题: 用注释解释复杂代码
重构方法: 让代码自解释
java// ✗ 重构前 // 检查用户是否有效 if (u != null && u.getS() == 1 && u.getD() == 0) { } // ✓ 重构后 if (user.isValid()) { } // User 类中 public boolean isValid() { return this.status == StatusEnum.ENABLE && this.delFlag == 0; }
重构检查清单
- 是否有测试覆盖
- 重构后功能是否正常
- 代码是否更清晰
- 是否引入新问题
- 是否需要更新文档
注意事项
- 不要同时重构和加功能 - 分开进行
- 有测试再重构 - 没有测试先补测试
- 小步提交 - 便于回滚
- 保持克制 - 只重构必要的部分
- 任务文档同步 - 维护流程状态、产物清单、上下文快照、下一步指令


