周一早上十点,需求评审会。产品经理小林推了推眼镜,指着原型图上一个不起眼的小开关说:“这个需求很简单,就加一个‘仅看未读’的筛选,应该就改一行代码吧?”
我笑而不语。旁边的测试小哥已经在悄悄摇头了。作为一个被“一行代码”坑过 N 次的老兵,我很清楚这四个字的含金量——它和“最后一版”、“明天就上线”、“这个不改了” 并列,属于程序员的四大恐怖传说。
一行代码?先看看这一行站在谁身上
打开代码一看,好家伙:列表页的查询逻辑是三年前的祖传代码,SQL 是拼出来的,筛选条件写死在七个 if 里面,而且这个“未读状态”压根不存在——现在的系统里,只有“已读”有记录,“未读”是靠 NOT IN 一个巨大的子查询反推出来的。
想加筛选?可以。先得把“已读”改成显式存储。想显式存储?可以。得写数据订正脚本,把历史数据刷一遍。想刷历史数据?可以,两千多万行,得考虑限速,不然主库先给你表演一个躺平。
所谓“改一行代码”,指的是在别人看不见的地方,先悄悄打好三层地基,再优雅地放上一块砖。
三周后的复盘
最终这个需求做了三周:一周重构、一周订正数据、一周灰度放量加回归测试。上线那天风平浪静,小林在群里发了个大拇指:“就说很简单吧~”
我看着屏幕上那个 if (onlyUnread),陷入了长久的沉默。它确实只有一行。就像冰山露出水面的那部分,确实只有一角。
几点自我安慰
- 至少这次没接
if-else的第五层套娃,而是顺手把查询层重构成了统一的 QueryBuilder; - 数据订正脚本以后还能复用,这次顺手写成了通用的;
- 下次评审会,我学乖了——小林说“一行代码”的时候,我会先问:“这一行,是站在哪一摞代码上面的?”
各位同行,你们最近一次听到的“这个很简单”,最后做了多久?评论区(并不存在)见。