Claude Code 项目重构实战:告别屎山的系统性方法
| 实战与进阶

Claude Code 项目重构实战:告别屎山的系统性方法

用 Claude Code 写项目,刚开始真的很爽。但项目越大,代码越乱——AI 帮你写的代码,你自己都看不懂,AI 自己读代码的效率也越来越低。

最后只能在屎山上继续堆屎山。

重构三步法

第一步:开启规划模式

Plan Mode 必须开。让 Claude 读取全项目,把重构计划写进 plan.md

请详细分析目前项目的代码结构,并制定一份重构计划:
- 按步骤拆解,每一步目标、依赖、注意事项都要写明
- 把讨论结果写入 plan.md 作为后续指导
- 详细列出项目阶段和 TODOList

规划文档结构:

# 项目重构计划

## 项目现状
- 代码规模:XX 个文件,XX 行代码
- 主要问题:代码重复、职责不清、可读性差
- 技术债务:需要重构的模块列表

## 重构目标
- 提升代码清晰度
- 优化模块组织
- 统一编码风格

## 重构步骤

### 第一阶段:基础结构优化
**目标**:建立清晰的模块边界
**步骤**
1. 提取公共工具类到 utils 模块
2. 重构数据访问层
3. 统一异常处理
**依赖**:无
**风险**:中等

### 第二阶段:业务逻辑重构
**目标**:提升业务代码可读性
**依赖**:第一阶段完成
**风险**:高

## TODOList
- [ ] 分析现有代码结构
- [ ] 识别重复代码
- [ ] 设计新的模块结构

第二步:小步快跑执行

请严格遵循 @plan.md 执行重构,一步一步来,每一步都需要我确认

执行原则:

  • 小步快跑:每次只重构一个小的功能单元
  • 频繁测试:每次修改后立即测试
  • 频繁提交:每通过一次测试就立刻 commit
  • 及时验证:确保功能没有被破坏

第三步:失败复盘与反思

AI 把项目改崩是常态。这时候用反思提示词:

这次需求失败了,回滚版本到 xxxx。
我们来反思下失败原因是什么?
如果重新开始,需要注意什么?
我需要用怎样的指令?

反复追问:

  • 你为什么要改变这个方法的判断逻辑?
  • 为什么不按照原来的错误处理方式?
  • 为什么要移动这个工具函数的位置?

把经验写入 plan.md,为下次重构做准备。

成功后同样要记录:

迭代成功,记录目前的进展以及成功的关键经验到 plan.md

重构核心原则

强约束:行为不变

  • 相同输入产生相同输出
  • 对外接口名称不变:公共类/函数签名保持不变
  • 数据契约不变:数据库结构与查询语义保持不变
  • 并发与时序不变:不新增并发单元,不改变重试策略

允许的更改

  • 文件/模块移动
  • 类/函数拆分
  • 内聚度提升
  • 添加轻量适配层
  • 补充类型注解/文档

禁止的更改

  • 性能微调
  • 算法替换
  • 默认值调整
  • 日志文案/错误消息更改
  • 排序/去重逻辑改变
  • I/O 位置或格式变化

提交策略

  • 单一职责变更:每次只做一类结构性修改
  • 小步可回退:每次变更可独立验证并快速回滚

每次重构完成后验证:

  1. 全面搜索残留引用,保证检索结果为 0
  2. 采样运行关键模式,不报错,输出路径未变

实用重构模板

refactor.md 模板

# 重构指导原则

## 重构原则
- **行为不变(强约束)**: 相同输入产生相同输出
- **对外接口名称不变**: 公共类/函数签名保持不变
- **数据契约不变**: 数据库结构与查询语义保持不变

## 变更粒度
- **单一职责变更**: 每次只做一类结构性修改
- **小步可回退**: 让每次变更可独立验证

## 重要提醒
1. 完成每个子任务后,立刻更新 TODO 和进度
2. 任何可能改变行为的修改一律禁止
3. 对每段迁移代码标注来源映射
4. 全面搜索残留引用,采样运行关键模式
5. 大任务拆解为数个可独立验证的小任务
6. 保留原始变量名、错误文案、日志格式

## 核心经验
1. 系统性思维优于局部思维
2. 依赖分析优于代码拷贝
3. 渐进验证优于批量操作
4. 工具辅助优于人工分析
5. 行为保持优于代码美化

函数提取

将 note.py 的 extract_note_id 方法提取成公共方法放到 util.py 中
并且对项目完成整体替换

重构步骤:
1. 先创建测试用例验证原功能
2. 提取方法到 util 模块
3. 更新所有调用点
4. 运行测试确保功能正常
5. 提交变更

类结构重构

重构 UserService 类,拆分为:
1. UserValidator - 验证逻辑
2. UserRepository - 数据访问
3. UserBusinessService - 业务逻辑

要求:
- 保持原有接口不变
- 每个新类职责单一
- 更新所有依赖注入配置

模块重构

重构订单模块,按以下步骤:
1. 分析现有订单相关的类和依赖关系
2. 设计新的模块结构(domain/service/repository/controller)
3. 逐个迁移类到新结构
4. 更新配置和依赖注入
5. 运行集成测试验证

每完成一个类的迁移都要测试验证

常见问题

重构后功能异常

重构后功能出现异常,请帮我:
1. 检查最近的 git 提交记录
2. 分析可能影响的功能点
3. 查看错误日志
4. 提供修复建议

回滚命令:git reset --hard HEAD~1

依赖关系混乱

请分析项目中 User 类的依赖关系:
1. 找出所有引用 User 类的地方
2. 分析依赖关系的合理性
3. 识别循环依赖问题
4. 提供重构建议

经验总结

成功经验

  • 充分的前期准备:详细的规划是成功的关键
  • 小步快跑:避免大规模同时修改
  • 持续测试:每次修改后立即验证
  • 经验积累:记录每次重构的经验和教训

失败教训

  • 过度依赖 AI:AI 的理解能力有限,需要人工监督
  • 忽视测试:没有充分测试保护导致功能破坏
  • 重构范围过大:试图一次性重构太多内容
  • 缺乏回滚准备:没有制定有效的回滚策略

重构的本质是在保持行为不变的前提下改善代码结构。AI 是工具,不是银弹。规划、执行、复盘,循环往复,才能真正告别屎山。