用 Claude 3.5 Sonnet 快速重构旧项目的遗留代码实战分享
这次我处理一个旧的 Node.js 订单处理模块,里面有个 800 行的 processOrder 函数,嵌套了五层 if-else。我没有直接粘贴代码,而是先给 Claude 3.5 Sonnet 喂了一段特定的「上下文指令」:
你现在是一个资深架构师。我将分批发送一个遗留模块的代码。
第一步:你不要写任何代码,只需分析逻辑并输出一个【逻辑流转图】(用文本形式)。
第二步:在我确认逻辑正确后,你再针对单个逻辑分支进行重构。
要求:保持原有的副作用(Side Effects)不变,将复杂的判断逻辑提取为策略模式(Strategy Pattern)。实战操作技巧:
1. 强制要求生成类型定义
旧代码最坑的是不知道变量到底是什么类型。在重构前,我先让它根据逻辑推断出 TypeScript Interface。只要类型定义准确了,后面的重构准确率能提升 50% 以上。
2. 避免“过度优化”的配置
Claude 3.5 Sonnet 有时太想展示自己的能力,会引入很多不必要的第三方库。我在 Prompt 中明确限制:只允许使用原生 JS/TS 语法,除非我明确要求引入库,否则禁止增加依赖。
3. 局部替换而非整体覆盖
我习惯用 Cursor 的 Cmd + K 选中具体的一个函数块,输入 Refactor this block to a separate pure function, ensure no state leakage。这样比直接让它重写整个文件要稳得多,因为能有效避免它在生成过程中由于 Token 限制而省略掉中间的某些关键逻辑(也就是所谓的 // ... rest of the code 坑)。
踩过的坑:
最严重的一次是它为了追求“简洁”,把一个带有异步等待的循环改成了 Promise.all,导致数据库连接数瞬间爆表。教训: 涉及并发、内存管理或第三方 API 调用频率的代码,必须在 Prompt 中标注 Keep the sequential execution order(保持顺序执行)。
重构前后的对比片段:
原代码(典型的面条代码):
if (order.status === 'paid') {
if (user.level === 'vip') {
// 10行处理逻辑
} else {
// 10行处理逻辑
}
}重构后(策略映射):
const OrderHandler = {
vip: (order) => { /* 逻辑 */ },
normal: (order) => { /* 逻辑 */ },
};
const handleOrder = (order, user) => {
const handler = user.level === 'vip' ? OrderHandler.vip : OrderHandler.normal;
return handler(order);
};这种通过「逻辑确认 → 类型定义 → 局部重构」的链路,比直接把代码扔给 AI 效率高得多,且不需要花大量时间去修 AI 引入的新 Bug。
全部回复 (0)
还没有回复,来发第一条吧!
