第四章 · 从测试里长出的设计


第四章 · 从测试里长出的设计

章节摘要:折扣规则越加越多,灯塔小组发现一个怪事:写测试顺手的时候,接口也变好用了;反过来接口一乱,测试先写不下去。本章沿这条线把"测试先行浮现设计"从感觉变成机制——测试作为第一个使用者逼出好接口,设计模式在循环里怎么演练,SOLID 原则各落在循环的哪个位置。读完你应能解释并用好"TDD 是设计技术"这半句常被忽略的话。

一条主线

周五评审会上,产品宣布下季度接入三平台优惠券。小林心里一沉:现在的 rate 里折扣逻辑写死在函数体里,加个平台要开膛一次。老周翻开测试文件说:加吧,测试会替我们指路的。接下来的三轮循环里,测试先要求"平台券与店铺券叠加上限",再要求"黑名单平台不参与",每条红灯都逼着折扣逻辑往外挪一点——挪到最后,策略结构自己出现了:折扣计算器只依赖"可计算"协议,各平台各领各的策略。设计没有事先画出来,是被测试一格一格挤出来的。

沿途站点

  • 测试先行如何浮现设计——机制层:测试是代码的第一个使用者,使用者视角逼出松耦合接口;松耦合又反过来让测试好写,形成正反馈。这一站解释"为什么",后两站练"怎么做"。
  • 演练三种模式:策略、模板方法与观察者——用折扣策略、报表导出、库存预警三个真实需求,看模式如何从红灯里长出来,而不是从模式书里抄出来。
  • SOLID 在循环里的位置——五条原则逐条放进红绿重构的坐标系:哪条是测试先行自动兑现的,哪条要靠重构手法主动挣,哪条要警惕过度。

拐点与结论

本章的转折点是视角切换:把测试从"验证者"改成"第一个客户"。客户不关心你怎么实现,只关心好不好用——接口的形状于是由使用便利性决定,而非实现便利性。第二转折在"模式的出现时机":预先套模式常见过度设计,因为模式是针对变化的预案,而变化只有来了才知道长什么样;测试先行把变化的出现时刻转化为红灯时刻,模式恰好在需求落地那一刻登场,不多不少。结论:TDD 的全称里该有个逗号——测试驱动开发,驱动的是设计,测试只是传动装置。这也是它区别于"测试活动"的根本身份:与其说它在验证一个已有设计,不如说它在持续追问设计能不能再简单一点、接口能不能再好用一点,追问的频率高到设计来不及腐化。

读完你应该

  • 能说出"测试是第一个使用者"如何导致接口松耦合,并举一个自己代码里的实例;
  • 能用三轮循环让策略模式从折扣需求里自然浮现,而不是预先套壳;
  • 能判断一个需求适合用哪种模式承接,并给出红灯怎么写;
  • 能把 SOLID 五条逐一映射到循环阶段,指出哪些免费、哪些要挣;
  • 能识别"设计过度"的信号并敢于回退。

先决条件与本章配套

本章的演练依赖第 3 章的替身功夫(策略与观察者的红灯都要替身参与)与第 2 章的重构手感。三个演练的代码都在折扣、报表、库存三个真实需求上展开,难度递增,建议顺序读:先看懂"模式如何被逼出来",再回头在编辑器里把三段代码补全。读法上有个提醒:本章处处与设计模式的教科书冲突——那不是 bug 是立场,冲突点全部标了"事后命名",带着这个关键词读,张力会变成清晰。

下一章的接力

设计讲的是"从零长出好结构";现实常常相反——接手的是没有测试的旧代码。第 5 章把镜头转向金字塔分层、遗留代码改造与时间异步这些硬骨头,骨架功夫(替身、夹具)将在那里兑现价值。

作者与出处
原作者:灏天文库
来源:平台策划编纂
整理人: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U