---
name: refactoring
description: 当需要改善代码结构、提升代码质量或清理技术债务时使用此规则——重构规则，代码重构方法和流程，改善代码结构。包括：识别代码异味和问题区域；提取函数和方法消除重复；提取类和模块降低耦合；简化条件逻辑和复杂表达式；优化命名提高可读性；重构数据结构和算法；保持功能不变的前提下改进代码；编写和维护测试确保重构安全；使用重构工具和IDE支持；进行小步重构和持续改进。每当用户提及"重构"、"代码优化"、"技术债务"、"改善代码"、"清理代码"、"优化结构"、"重构代码"或需要代码重构、代码优化、技术债务清理时触发，无论编程语言和项目规模如何。如果需要改善代码结构但不改变功能，请使用此规则。
---

# 重构规则

## 你必须遵守的重构原则

### 1. 小步快跑原则（必须遵守）

**执行要求：**

- **必须**：每次重构只做小的改动
- **必须**：每次改动后立即运行测试
- **必须**：确认测试通过后再进行下一步重构
- **必须**：使用版本控制，每次小改动都提交，便于回滚

**禁止行为：**

- **禁止**：一次性进行大规模重构
- **禁止**：在测试未通过的情况下继续重构

### 2. 保持功能不变原则（必须遵守）

**执行要求：**

- **必须**：重构不应该改变代码的外部行为
- **必须**：重构前后，所有测试必须都能通过
- **必须**：如果有功能变更需求，必须单独提交，不要与重构混在一起

**验证方法：**

- 重构前运行所有测试，记录测试结果
- 重构后运行所有测试，确保结果一致
- 如果测试失败，立即回滚或修复

### 3. 识别代码异味（必须识别并处理）

**你必须识别并处理的代码异味：**

- [ ] 重复代码（违反 DRY 原则）
- [ ] 过长的方法或类（超过合理长度）
- [ ] 过深的嵌套（超过 3-4 层）
- [ ] 魔法数字和字符串（未命名的常量）
- [ ] 过度的参数列表（超过 3-4 个参数）
- [ ] 过长的方法链
- [ ] 过大的类（职责过多）

## 你必须掌握的重构技巧

### 1. 提取方法（Extract Method）

**何时使用：** 方法过长或包含重复逻辑
**操作步骤：**

1. 识别可以独立的方法块
2. 创建新方法，移动代码
3. 用方法调用替换原代码
4. 运行测试确认

### 2. 提取变量（Extract Variable）

**何时使用：** 复杂表达式难以理解
**操作步骤：**

1. 识别复杂表达式
2. 创建有意义的变量名
3. 用变量替换表达式
4. 运行测试确认

### 3. 重命名（Rename）

**何时使用：** 名称不清晰或误导
**操作步骤：**

1. 确定更清晰的名称
2. 使用 IDE 的重构工具进行重命名
3. 运行测试确认

### 4. 消除重复（Remove Duplication）

**何时使用：** 发现重复代码
**操作步骤：**

1. 识别重复模式
2. 提取公共逻辑到函数或类
3. 替换所有重复代码
4. 运行测试确认

### 5. 简化条件（Simplify Conditional）

**何时使用：** 条件表达式复杂难懂
**操作步骤：**

1. 提取条件到有意义的变量
2. 使用早期返回减少嵌套
3. 使用更清晰的条件表达式
4. 运行测试确认

### 6. 移动代码（Move Code）

**何时使用：** 代码位置不合适
**操作步骤：**

1. 确定代码应该存在的位置
2. 移动代码到合适位置
3. 更新引用
4. 运行测试确认

## 重构时机判断

### 你必须进行重构的情况

1. **添加新功能前**：
   - 如果现有代码结构难以扩展
   - **必须**：先重构现有代码，使其更容易扩展
   - **然后**：再添加新功能

2. **修复 Bug 时**：
   - 如果发现代码结构有问题导致 Bug
   - **必须**：先重构代码结构
   - **然后**：再修复 Bug

3. **代码审查时**：
   - 如果发现可以改进的地方
   - **必须**：建议重构
   - **必须**：提供具体的重构建议

4. **定期清理**：
   - **必须**：定期进行技术债务清理
   - **必须**：识别并重构代码异味

## 重构执行检查清单

在完成重构后，你必须确认：

- [ ] 所有测试都能通过（重构前后测试结果一致）
- [ ] 代码更清晰、更易读
- [ ] 没有引入新的 bug
- [ ] 性能没有明显下降（如有下降，必须说明原因）
- [ ] 代码更易于扩展和维护
- [ ] 代码异味已消除或减少
- [ ] 重构已提交到版本控制
