我们开发的每一个需求,基本 80% 的时间在搞清楚该改什么,只有 20% 在写代码。这不是你能力不够,是软件的复杂度在跟你作对
一个似曾相识的场景
接到需求:结算单状态机增加一个「部分退款」中间状态
在梳理了 SettlementService、SettlementController、SettlementStateMachine 后,改动范围很清楚——加一个枚举值,改三条状态流转路径。改动量很小,代码 review 也顺利通过。
结果上线第二天,告警来了:对账报表里部分退款的结算单被重复计入
问题出在一个没人知道的类——ReconciliationReportBuilder。它内部有一个 switch-case 遍历结算单状态来决定归入哪个科目,新增的枚举值走到了 default 分支,被当成「已结算」处理了
这个类的存在,在改代码的时候可能完全不知道。甚至不知道「我应该知道它的存在」
如果你在接手业务需求的时候也踩过类似的坑,这篇文章就是写给你的