“Gilded Rose”在 Ruby 中的重构 kata ——就好像是 2024 年一样

主要观点:介绍用“故事优先”的方法重构一段小而复杂的商业代码,以“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”的重构过程,展示了不同的测试和实现方法,强调在处理复杂代码时应根据实际情况选择合适的方式,注重代码的整体可读性和可维护性。

阅读 10
0 条评论