🗞️ Claude Code 日报/用 Claude Code 现代化遗留代码:不重写,而是渐进迁移
1 分钟阅读30 天内

用 Claude Code 现代化遗留代码:不重写,而是渐进迁移

#claude-code#legacy-code#refactoring#migration#technical-debt𝕏 分享

遗留代码最怕的不是"不现代",而是无法安全地改动它。Claude Code 在这里的价值是帮你建立信心——在改动之前理解它,改动时有保障,改动后能验证。

第一步:理解你不敢碰的代码

claude "帮我理解这段代码在做什么。
背景:这是 2015 年写的 PHP 支付处理模块,没有注释,没有测试。
我需要在里面加一个新的支付渠道。

要求:
1. 列出核心业务逻辑(不是代码细节,是它在做什么)
2. 找出所有的副作用(数据库写入、外部调用、日志)
3. 找出可能的地雷(全局状态、魔法数字、隐式依赖)
4. 哪些地方碰了最容易出问题?"

给遗留代码补测试(再改动之前):

claude "在修改这个函数之前,帮我给它写特性测试(Characterization Test)。

特性测试不验证'正确行为',而是记录'当前行为':
1. 给出这个函数的所有输入组合(正常、边界、异常)
2. 为每种输入写一个测试,捕获当前输出
3. 测试名称用描述当前行为的方式命名,不用'should'

目的:改动后如果行为变了,测试会告诉我。"

渐进式提取(不整体重写):

claude "帮我从这个 500 行的函数中提取出一个独立模块。

策略:Strangler Fig 模式
1. 找到一个可以独立的功能单元(最好是有明确输入输出的部分)
2. 提取成独立函数,保持原函数调用它(不改变外部行为)
3. 给提取出来的函数写独立测试
4. 告诉我提取后怎么验证我没有改变行为

不要整体重写,每次只动一处。"

数据库 schema 的现代化:

claude "我有一个遗留 MySQL 数据库,设计是 2010 年的。
问题:
- 所有时间字段用 INT 存 Unix timestamp
- 用 VARCHAR 存 JSON 字符串
- 没有外键约束
- 表命名不一致(users、TBL_ORDER、ProductInfo)

帮我制定迁移路线:
1. 按风险从低到高排序需要改的地方
2. 每个改动如何做到不停服
3. 如何用双写策略过渡
4. 如何验证数据一致性"

依赖地狱的处理:

claude "这个项目有大量过时依赖,npm audit 报 47 个漏洞。
package.json 如下:[内容]

帮我制定升级策略:
1. 哪些漏洞是真正危险的(不是误报)?
2. 哪些依赖可以直接升级(不破坏 API)?
3. 哪些升级需要代码改动(major version)?
4. 如何在不中断开发的情况下批量升级?

优先级:安全漏洞 > 破坏性依赖 > 过时但稳定的依赖"

原则:遗留代码的改动要有出口

claude "我要把这个系统从 Python 2 迁移到 Python 3。
代码量:约 50,000 行。现有测试覆盖率:15%。

不要给我'全量迁移'方案。
给我一个可以持续 6 个月的渐进方案:
1. 第一个月:哪些先动(低风险高收益)?
2. 如何让 Python 2 和 3 代码共存?
3. 怎么知道每一步是成功的?
4. 最大的风险点在哪里,怎么提前规避?"

遗留代码改造的核心心理:不是"把坏代码变成好代码",而是"在不破坏运行中系统的前提下,一点一点建立可测试的边界"。每次改动前,理解;每次改动后,验证;改动本身,要能撤回。

← 上一篇Terraform + Claude Code:基础设施即代码的 AI 工作流下一篇 →GraphQL API 设计与 Claude Code:Schema 即合同