T04 设计与开发 ⭐⭐⭐ ⏱ 约 45 分钟

安全重构

Refactor with Behavior Safety

💡 适用场景: 代码改进、技术债处理

📄 T04: Refactor with Behavior Safety(安全重构) 其他

⭐⭐⭐ 中级 | 在保持功能不变的前提下改进代码

💡 核心概念 核心概念

安全重构的关键是:

  1. 行为不变 - 功能完全相同,没有任何变化
  2. 逐步进行 - 不要一次改太多
  3. 测试覆盖 - 有充分的测试保证安全
  4. 版本控制 - 每个步骤都提交,便于回滚

重构的目标:

  • 提高可读性
  • 降低复杂度
  • 改善性能
  • 消除代码坏味道
  • 降低技术债

最佳实践 最佳实践

🎯 原则1: 先有测试再重构

  • 先补充单元测试
  • 确保测试覆盖所有场景
  • 之后再开始重构

🎯 原则2: 小步快走

  • 每个重构步骤都很小
  • 每步之后立即运行测试
  • 发现问题立即回滚

🎯 原则3: 明确重构目标

  • 为什么要重构
  • 目标是什么
  • 成功的标准是什么

🎯 原则4: 充分沟通

  • 告知团队你在重构什么
  • 说明重构的益处
  • 邀请code review

📄 常见重构模式 其他

模式1: 提取方法(Extract Method)

场景: 函数太长,逻辑混杂

Prompt模板:

请帮我重构这个函数,将其拆分成多个小函数。

原始函数:
[函数代码]

问题:
- 函数太长([行数]行)
- 包含[数字]个不同的逻辑

拆分建议:
[说出你想如何拆分]

要求:
- 保持原有功能完全不变
- 新函数应该有清晰的职责
- 函数名应该具有说明性
- 包括[语言]的实现

模式2: 消除重复代码

场景: 多个函数有相同的逻辑

Prompt模板:

这些函数有重复代码,请帮我消除重复。

函数1:
[代码]

函数2:
[代码]

函数3:
[代码]

重复的部分:
[指出重复的逻辑]

重构目标:
- 提取公共代码
- 创建通用的helper方法
- 保持原有API不变

使用[语言/框架]实现。

模式3: 简化条件表达式

场景: 复杂的if-else逻辑

Prompt模板:

这段条件判断很复杂,请简化它。

原始代码:
```python
if age >= 18 and not has_debt and employment_status == 'employed':
    if years_employed >= 2:
        if credit_score >= 600:
            return approve_loan()
return reject_loan()

请重构为更简洁的版本:

  1. 使用提前返回(early return)
  2. 提取验证逻辑到独立方法
  3. 使用更清晰的变量名

### 模式4: 替换临时变量

**场景**: 使用临时变量而不是更好的方式

**Prompt模板:**

这段代码使用了太多临时变量,请简化。

原始代码: [代码]

问题:

  • 临时变量[var1, var2]没有明确含义
  • 代码逻辑不清晰

优化建议:

  • 使用函数替代临时变量
  • 使用更好的数据结构
  • 或使用函数链式调用

请提供改进版本。


---

📋 重构检查清单 检查清单

📄 🎓 下一步 其他

  • 重构发现bug → T03: Bug Diagnosis
  • 需要测试覆盖 → T05: Unit Testing
  • 需要审查 → T07: Code Review

💬 Prompt 模板 (3)

安全重构 - Prompt 1
详情
请帮我重构这个函数,将其拆分成多个小函数。

原始函数:
[函数代码]

问题:
- 函数太长([行数]行)
- 包含[数字]个不同的逻辑

拆分建议:
[说出你想如何拆分]

要求:
- 保持原有功能完全不变
- 新函数应该有清晰的职责
- 函数名应该具有说明性
- 包括[语言]的实现
安全重构 - Prompt 2
详情
这些函数有重复代码,请帮我消除重复。

函数1:
[代码]

函数2:
[代码]

函数3:
[代码]

重复的部分:
[指出重复的逻辑]

重构目标:
- 提取公共代码
- 创建通用的helper方法
- 保持原有API不变

使用[语言/框架]实现。
安全重构 - Prompt 3
详情
这段代码使用了太多临时变量,请简化。

原始代码:
[代码]

问题:
- 临时变量[var1, var2]没有明确含义
- 代码逻辑不清晰

优化建议:
- 使用函数替代临时变量
- 使用更好的数据结构
- 或使用函数链式调用

请提供改进版本。