主要观点:介绍用“故事优先”的方法重构一段小而复杂的商业代码,以“Gilded Rose”为例,包括添加单元测试、实现代码及处理新需求等方面,并探讨了不同实现方式的优缺点,强调在需求不确定时保持代码整体可见性的重要性。
关键信息:
- “Gilded Rose”是著名的重构练习,初始 Ruby 实现是 45 行的嵌套
if
语句,建议进行重构。 - 测试方面,采用 TDD/BDD 方法,喜欢简洁且能清晰表达意图的测试,如使用
it_with
方法或其他方式编写输入输出对的测试。 - 实现代码时,将所有条件描述为简单的依赖
(name, sell_in) => change of quality
,利用模式匹配,代码更简洁清晰,核心方法约 25 行。 - 处理新需求如“Conjured”物品质量下降速度加倍时,只需添加少量测试和代码。
- 对于模式匹配中重复的名称检查,可考虑用
case
/when
替代,或采用基于数据的方法,但要根据情况决定。
重要细节: - Ruby 中模式匹配使用
===
匹配方法,范围..0
的\===
方法可用于判断数字是否在范围内。 - Rubocop 会对代码的复杂度等提出警告,但作者认为对“小简单方法”的过度追求有些过头。
- 提到“故事优先”方法,在代码量较小时保持整体可见性,需求增多后再考虑抽象。
总结:通过“Gilded Rose”的重构过程,展示了不同的测试和实现方法,强调在处理复杂代码时应根据实际情况选择合适的方式,注重代码的整体可读性和可维护性。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。