name: 重构模式 description: “应用安全重构模式以改进代码结构而不改变行为。用于清理代码、减少技术债务或提高可维护性。” category: 开发实践 priority: 中 tokenEstimate: 1000 agents: [qe-code-reviewer, qe-quality-analyzer, qe-test-refactorer] implementation_status: 优化 optimization_version: 1.0 last_optimized: 2025-12-03 dependencies: [] quick_reference_card: true tags: [重构, 代码质量, 技术债务, 可维护性, 干净代码] trust_tier: 2 validation: schema_path: schemas/output.json validator_path: scripts/validate-config.json
重构模式
<default_to_action> 重构时:
- 确保测试通过(没有测试不要重构)
- 做小改动(一次一个重构)
- 运行测试(必须保持绿色)
- 提交(保存进度)
- 重复
安全重构周期:
npm test # 绿色 ✅
# 做一个小的改动
npm test # 仍然绿色 ✅
git commit -m "refactor: extract calculateTotal"
# 重复
代码异味 → 重构:
| 异味 | 重构 |
|---|---|
| 长方法(>20 行) | 提取方法 |
| 大类 | 提取类 |
| 长参数列表(>3) | 引入参数对象 |
| 重复代码 | 提取方法/类 |
| 复杂条件语句 | 分解条件 |
| 魔法数字 | 命名常量 |
| 嵌套循环 | 替换为管道 |
永不重构:
- 没有测试时(先写测试)
- 当截止日期是明天时
- 你不理解的代码
- 工作正常且不会触及的代码 </default_to_action>
快速参考卡
常见重构
| 模式 | 之前 | 之后 |
|---|---|---|
| 提取方法 | 50 行的函数 | 5 个小函数 |
| 提取类 | 做 5 件事的类 | 5 个单一职责的类 |
| 参数对象 | fn(a,b,c,d,e,f) |
fn(options) |
| 替换条件 | if (type === 'a') {...} |
多态 |
| 管道 | 嵌套循环 | .filter().map().reduce() |
三条规则
- 第一次 → 直接做
- 第二次 → 容忍并重复
- 第三次 → 重构
关键模式
提取方法
// 之前:长方法
function processOrder(order) {
// 50 行验证、计算、保存、发送邮件...
}
// 之后:清晰的职责
function processOrder(order) {
validateOrder(order);
const pricing = calculatePricing(order);
const saved = saveOrder(order, pricing);
sendConfirmationEmail(saved);
return saved;
}
替换循环为管道
// 之前
let results = [];
for (let item of items) {
if (item.inStock) {
results.push(item.name.toUpperCase());
}
}
// 之后
const results = items
.filter(item => item.inStock)
.map(item => item.name.toUpperCase());
分解条件
// 之前
if (order.total > 1000 && customer.isPremium && allInStock(order)) {
return 'FREE_SHIPPING';
}
// 之后
function isEligibleForFreeShipping(order, customer) {
return isLargeOrder(order) &&
isPremiumCustomer(customer) &&
allInStock(order);
}
重构反模式
| ❌ 反模式 | 问题 | ✅ 更好方式 |
|---|---|---|
| 没有测试 | 没有安全网 | 先写测试 |
| 大爆炸 | 重写所有 | 小步骤增量 |
| 为了完美 | 无止境的调整 | 足够好就继续 |
| 过早抽象 | 模式不清晰 | 等待三条规则 |
| 在功能工作中 | 混合改动 | 分开提交 |
代理集成
// 检测代码异味
const smells = await Task("检测代码异味", {
source: 'src/services/',
patterns: ['长方法', '大类', '重复代码']
}, "qe-quality-analyzer");
// 安全重构与测试验证
await Task("验证重构", {
beforeCommit: 'abc123',
afterCommit: 'def456',
expectSameBehavior: true
}, "qe-test-executor");
代理协调提示
内存命名空间
aqe/refactoring/
├── smells/* - 检测到的代码异味
├── suggestions/* - 重构建议
├── verifications/* - 行为保持检查
└── history/* - 重构日志
舰队协调
const refactoringFleet = await FleetManager.coordinate({
strategy: 'refactoring',
agents: [
'qe-quality-analyzer', // 识别目标
'qe-test-generator', // 添加安全测试
'qe-test-executor', // 验证行为
'qe-test-refactorer' // TDD 重构阶段
],
topology: 'sequential'
});
相关技能
- tdd-london-chicago - TDD 重构阶段
- code-review-quality - 评审重构代码
- xp-practices - 集体所有权
记住
重构不是:
- 添加功能
- 修复错误
- 性能优化
- 从头重写
重构是:
- 改进结构
- 使代码更清晰
- 减少复杂性
- 消除重复
- 不改变行为
始终有测试。始终小步骤。始终保持测试绿色。