← 全部极客知识库

主流 Agent 入门教程 / CodeBuddy

7. 案例4-重构那个没人敢动的模块

原文备份 · 第 9 / 16 篇 · 查看极客时间原知识库 ↗

本篇目录 · 5 节

来源:CodeBuddy

7.1 接续条件

沿用第 6 章副本,先跑全套 pytest,并确认四个折扣边界已经通过。提交修复,工作区干净后创建 refactor/billing 分支。本素材刻意保持短小,processor.py 没有几百行,也没有 render_text、write_outputs 等函数;不要为演示拆分而凭空造出七层模块。

7.2 给外部行为留证据

processor.process(path, month) 接收 CSV 路径和月份,返回 Invoice 列表。先补一组特征测试:同月多客户、跨月、空输入、非法用量;断言客户、套餐、用量、小计、折扣和 finalize() 金额。用临时 CSV,不改配套原始数据。

记录 CLI 的 14 张账单输出,其中 C1016 为 1028.20,C1017 为 1908.00。特征测试记录现状,但发现现状违反合同仍需单独记录缺陷,不能因为快照通过就宣布正确。

7.3 只抽出一个有价值的边界

先让助手给方案,不写代码。可选的小步是抽出纯函数 build_invoice(row),保留 process(path, month) 的签名、筛选规则和输出顺序。确认后退出 Plan 模式,授权这一小步;拒绝新增不必要的配置框架。

改完跑单元及 CLI 测试,查看 git diff,确认没有改价格、折扣或舍入规则,再提交。若扩展出 CSV 导出,先增加对外契约和回归测试,作为功能开发另一次提交,不混进“行为不变”的重构。

7.4 失败实验与回退

需要比较“一口气重写”时,从干净提交创建独立 worktree;方法见第 5 章 5.4。主工作区保留通过测试的版本。改动未提交时先看 diff 并保存需要的内容,不能把切换分支当作清空改动。

7.5 验收

全部测试通过、CLI 两个关键金额不变、对外签名不变、每次提交只有一个意图。最终记录抽出的职责以及为何值得抽出;没有收益时保留原实现也是合理结论。