Skip to content
Back to skills

Refactoring Assistant

ASecurity

引导重构决策和大规模代码改进。 使用时机:重构代码、遗留系统现代化、技术债、重写决策。 关键字:refactor, rewrite, legacy, strangler, technical debt, 重构, 重写, 技术债.

  • 75 stars
  • 0 votes
  • 0 copies
  • 12 views
  • Added February 8, 2026
developmentrefactoringcode-reviewgit

Works with

  • claude code

Security analysis

A100/100

Scanned February 12, 2026

npx -y skills add AsiaOstrich/universal-dev-standards --skill refactoring-assistant --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Refactoring Assistant?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Refactoring Assistant
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/asiaostrich-refactoring-assistant/badge)](https://www.skillsdirectory.com/skills/asiaostrich-refactoring-assistant)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
source: ../../../../skills/refactoring-assistant/SKILL.md
source_version: 2.0.0
translation_version: 2.0.0
last_synced: 2026-01-21
status: current
name: refactor
description: |
  引导重构决策和大规模代码改进。
  使用时机:重构代码、遗留系统现代化、技术债、重写决策。
  关键字:refactor, rewrite, legacy, strangler, technical debt, 重构, 重写, 技术债.
---

# 重构助手

> **语言**: [English](../../../../skills/refactoring-assistant/SKILL.md) | 简体中文

**版本**: 2.0.0
**最后更新**: 2026-01-21
**适用范围**: Claude Code Skills

---

## 目的

本技能提供重构与重写的决策框架、大规模重构模式,以及技术债管理。策略分为三个层级:战术性(日常)、战略性(架构)、安全防护(遗留代码)。

---

## 快速参考(YAML 压缩格式)

```yaml
# === 决策:重构 vs 重写 ===
decision_tree:
  - q: "代码在生产环境运行?"
    n: "→ 考虑重写(风险较低)"
    y: next
  - q: "了解代码的功能?"
    n: "→ 先写特征测试"
    y: next
  - q: "测试覆盖率 >60%?"
    n: "→ 先补测试"
    y: next
  - q: "核心架构可修复?"
    n: "→ Strangler Fig 模式"
    y: "→ 增量重构 ✓"

comparison_matrix:
  favor_refactor: [大型代码库, 良好测试, 业务关键, 团队熟悉, 架构健全, 时间紧迫, 低风险]
  favor_rewrite: [小型独立, 无测试, 可容忍停机, 无人熟悉, 架构有缺陷, 时间充裕, 较高风险]

# === 警告:第二系统效应 ===
rewrite_antipatterns:
  - "加入原本没有的功能"
  - "为未来弹性过度抽象"
  - "忽略现有系统的经验教训"
quote: "第二个系统是一个人设计过最危险的系统。— Fred Brooks"

# === 战术性策略:日常重构 ===
tactical:
  preparatory_refactoring:
    definition: "在新增功能前调整结构,让改变更容易"
    quote: "先把改变变容易(这可能很难),然后再做那个容易的改变。— Kent Beck"
    when: [功能被阻挡, 降低阻力, 即将变更]
    workflow:
      1: "识别要做的改变"
      2: "识别是什么让改变困难"
      3: "重构以让改变变容易"
      4: "做那个(现在变容易的)改变"
    principles:
      - "预备性重构与功能分开提交"
      - "每一步都维持测试通过"
      - "不要混合重构与功能工作"

  boy_scout_rule:
    definition: "离开时让代码比来时更干净(机会主义重构)"
    quote: "离开营地时,让它比你来的时候更干净。— Robert C. Martin"
    when: [任何维护, Bug修复, 功能新增, 对抗熵]
    guidelines:
      - "只做小改进(分钟,不是小时)"
      - "不改变行为"
      - "不破坏现有测试"
      - "保持范围在当前任务内"
    examples:
      - "重新命名令人困惑的变量"
      - "将几行代码提取为命名良好的方法"
      - "移除死代码"
      - "加入澄清注释"
    antipatterns:
      - "把 Bug 修复变成大重构"
      - "重构不相关的代码"
      - "没有测试覆盖就修改"
      - "范围蔓延超出原始任务"

  red_green_refactor:
    definition: "TDD 重构阶段"
    duration: "每循环 5-15 分钟"
    scope: "单一方法/类"
    techniques: [提取方法, 重新命名, 内联变量, 替换魔术数字]
    reference: "→ 见 TDD 标准"

# === 战略性策略:架构重构 ===
strategic:
  strangler_fig:
    definition: "逐步将功能路由到新系统,渐进替换旧系统"
    origin: "命名自绞杀榕树"
    phases:
      1_拦截: "请求 → 门面 → 旧系统(100%)"
      2_迁移: "请求 → 门面 → [新系统(功能), 旧系统(其余)]"
      3_完成: "请求 → 新系统(100%) [旧系统下线]"
    checklist:
      - "识别拦截点"
      - "建立事件捕获层"
      - "在新系统实现第一个功能"
      - "渐进式路由流量"
      - "监控并比较"
      - "下线旧系统"

  anti_corruption_layer:
    definition: "防止遗留模型污染新系统的翻译层"
    origin: "Eric Evans, 领域驱动设计 (2003)"
    when:
      - "新旧系统必须共存并互动"
      - "遗留系统有混乱的领域模型"
      - "保护新系统的限界上下文"
    components:
      facade: "简化复杂的遗留接口"
      adapter: "将遗留数据转换为新领域模型"
      translator: "映射遗留术语到通用语言"
    checklist:
      - "定义清晰的 ACL 接口"
      - "映射遗留实体到新模型"
      - "处理数据格式转换"
      - "实现错误翻译"
      - "加入日志以便调试"
      - "彻底测试 ACL 隔离性"
    vs_strangler:
      strangler: "目标是取代遗留"
      acl: "目标是与遗留共存"

  branch_by_abstraction:
    steps:
      1: "客户端 → 抽象(接口) → 旧实现"
      2: "客户端 → 抽象 → [旧实现, 新实现(切换)]"
      3: "客户端 → 新实现 [旧实现已移除]"
    principles: [所有变更在主干, 功能开关, 过渡期共存]

  parallel_change:
    aka: "Expand-Migrate-Contract"
    phases:
      expand: "新增新的在旧的旁边,新代码用新的,旧的仍运作"
      migrate: "更新所有客户端用新的,验证,数据迁移"
      contract: "移除旧的,清理,更新文档"

# === 安全策略:遗留代码 ===
safety:
  legacy:
    definition: "没有测试的代码(不论年龄)"
    dilemma: "安全修改需要测试 → 加测试需要修改代码"
    solution: "使用安全技术先加测试"

  characterization_tests:
    purpose: "捕捉现有行为(非验证正确性)"
    process:
      1: "调用要理解的代码"
      2: "写预期会失败的断言"
      3: "执行,观察实际结果"
      4: "更新断言以匹配实际行为"
      5: "重复直到涵盖需要修改的行为"
    principle: "记录代码做什么,而非应该做什么"

  scratch_refactoring:
    definition: "为了理解而重构,舍弃所有变更"
    workflow:
      1: "建立探针分支(或 git stash)"
      2: "大胆重构以理解"
      3: "记录学到的内容"
      4: "舍弃变更(git reset --hard)"
      5: "应用学习编写特征测试"
    when: [代码太复杂, 无文档, 需要快速建立心智模型]
    principle: "目标是理解,不是整洁代码"

  seams:
    definition: "可以在不编辑代码的情况下改变行为的地方"
    object: "通过多态覆写(注入测试替身)"
    preprocessing: "编译时替换(宏)"
    link: "链接时替换(DI,模块替换)"

  sprout_wrap:
    sprout_method: "新逻辑 → 建立新方法,从旧的调用"
    sprout_class: "新逻辑独立演进 → 新类"
    wrap_method: "加入前后行为 → 重命名原方法,建立包装器"
    wrap_class: "装饰现有 → 装饰者模式"
    principle: "新代码用 TDD;遗留代码在测试前保持不动"

# === 数据库:重构 ===
db_expand_contract:
  expand: "新增新列/表,应用程序同时写入,可安全回滚"
  migrate: "复制数据,验证一致性,应用程序从新的读取"
  contract: "确认旧的未使用,移除旧的,清理双写"

db_scenarios:
  rename_column: {strategy: "新增→迁移→删除", risk: 中}
  split_table: {strategy: "新表+外键→迁移→调整", risk: 高}
  merge_tables: {strategy: "新表→合并→切换", risk: 高}
  change_datatype: {strategy: "新列→转换→切换", risk: 中}
  add_not_null: {strategy: "填默认→加约束", risk: 低}

# === 工作流程:安全重构 ===
before: [定义成功标准, "覆盖率>80%", 干净工作目录, 建立分支, 与团队沟通]
during: [一次一个小变更, 每次变更后测试, 失败就恢复, 频繁提交, 不加新功能]
after: [所有测试通过, 可衡量地更好, 文档已更新, 团队已审查, 没有新功能]

# === 指标 ===
code_quality:
  cyclomatic_complexity: "每函数<10"
  cognitive_complexity: "越低越好"
  coupling: "降低"
  cohesion: "提高"
  duplication: "<3%"

test_quality:
  coverage: "≥80%,不降低"
  speed: "重构后更快"
  flaky_count: "降低"

# === 技术债管理 ===
quadrant: # Martin Fowler
  prudent_deliberate: "我们知道这是债务"
  reckless_deliberate: "没时间做设计"
  prudent_inadvertent: "现在知道应该怎么做了"
  reckless_inadvertent: "什么是分层?"

priority:
  high: {criteria: "阻塞开发,频繁出错", action: "立即处理"}
  medium: {criteria: "拖慢开发,增加复杂度", action: "规划到下个迭代"}
  low: {criteria: "小麻烦,影响局部", action: "有机会就处理"}

tracking:
  fields: [描述, 影响, 估计工作量, 忽视风险, 相关代码]

# === 决策矩阵摘要 ===
decision_matrix:
  - {strategy: "预备性重构", scale: "小", risk: "低", use: "降低功能开发阻力"}
  - {strategy: "童子军规则", scale: "极小", risk: "低", use: "持续偿债"}
  - {strategy: "红-绿-重构", scale: "小", risk: "低", use: "TDD 开发循环"}
  - {strategy: "绞杀榕", scale: "大", risk: "中", use: "系统汰换"}
  - {strategy: "防腐层", scale: "中", risk: "低", use: "新旧共存"}
  - {strategy: "抽象分支", scale: "大", risk: "中", use: "主干重构"}
  - {strategy: "平行变更", scale: "中", risk: "低", use: "接口/Schema 迁移"}
  - {strategy: "特征测试", scale: "—", risk: "—", use: "遗留重构的前置条件"}
  - {strategy: "探针式重构", scale: "小", risk: "低", use: "理解黑盒代码"}

# === 策略选择 ===
selection_guide:
  功能被混乱代码阻挡: "预备性重构"
  在Bug修复中接触代码: "童子军规则"
  用TDD写新代码: "红-绿-重构"
  取代整个遗留系统: "绞杀榕"
  整合遗留不被污染: "防腐层"
  在主干重构共享代码: "抽象分支"
  变更广泛使用的接口: "平行变更"
  处理未测试的遗留: "特征测试 + 探针式重构 先做"
```

---

## 配置侦测

### 侦测顺序

1. 检查 `CONTRIBUTING.md` 中的「停用技能」区段
2. 检查 `CONTRIBUTING.md` 中的「重构标准」区段
3. 如果未找到,**默认使用标准重构实践**

---

## 详细指南

完整标准请参阅:
- [重构标准](../../core/refactoring-standards.md)

---

## 相关标准

- [重构标准](../../core/refactoring-standards.md) - 核心标准
- [测试驱动开发](../../core/test-driven-development.md) - TDD 重构阶段
- [代码审查检查清单](../../core/code-review-checklist.md) - 重构 PR 审查
- [签入标准](../../core/checkin-standards.md) - 提交前要求
- [TDD 助手](../tdd-assistant/SKILL.md) - TDD 工作流程

---

## 版本历史

| 版本 | 日期 | 变更 |
|------|------|------|
| 2.0.0 | 2026-01-21 | 新增战术性策略(预备性重构、童子军规则)、防腐层、决策矩阵摘要。重组为战术性/战略性/安全防护三层。 |
| 1.0.0 | 2026-01-12 | 初始发布 |

---

## 授权

本技能以 [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) 授权发布。

**来源**: [universal-dev-standards](https://github.com/AsiaOstrich/universal-dev-standards)

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.