ABAP设计模式之---“童子军法则(The Boy Scout Rule)”

法则介绍

The Boy Scout Rule ,中文一般翻译为"童子军法则",是一个简单却非常有意义的软件开发原则,它最早由软件开发大师 Robert C. Martin (Uncle Bob) 在他的《Clean Code》一书中提出。

这条法则的核心思想非常简单: "确保你离开代码的时候比你发现它时更干净。"

这条规则借鉴了童子军的一种行为习惯:在露营时,童子军团员会遵循一种纪律: 收拾营地时必须比他们到达时更干净整洁,再离开。我们在编写和改动代码时,也可以应用类似的理念。

这并不要求你每次改动代码时都去对整个代码库进行改造或重构,而是尽力让你涉及的那部分代码变得更好,比如更易读、更清晰、更少问题、更优雅。

简单概括就是:通过日积月累的小改进,逐步提升代码质量。


举个例子

场景

假设你是一位开发人员,正在修复一个在上市产品中的bug。你定位问题时,发现这个bug所在的代码片段是一个结构非常混乱的函数,看起来充满了臃肿的逻辑、重复代码和混乱的命名,比如:

java 复制代码
CLASS lcl_calculator DEFINITION.
  PUBLIC SECTION.
    METHODS calc
      IMPORTING
        p TYPE f
        y TYPE i
        t TYPE i
      RETURNING
        VALUE(result) TYPE f.
ENDCLASS.

CLASS lcl_calculator IMPLEMENTATION.
  METHOD calc.
    CASE t.
      WHEN 0.
        result = p + p * 0.03 * y.
      WHEN 1.
        result = p + p * 0.05 * y.
      WHEN OTHERS.
        result = 0.
    ENDCASE.
  ENDMETHOD.
ENDCLASS.

从代码上你能看出来,这个函数的目标是根据用户选择的投资类型 (t) 来计算利息。但阅读这段代码时,你可能感到困惑,因为变量命名模糊,且写法欠优雅。


应用

按照这个法则,你在修复 bug 的同时可以顺手将你看到的代码稍作优化改进!比如,你可以:

  1. 改进命名:把模糊的变量命名替换为易理解的名称,提高代码可读性。
  2. 去掉魔法数字 :把01这些数字抽取为具有含义的枚举值或常量。
  3. 提取重复逻辑:简化代码分支。

经过一个简单的重构,不额外引入新的逻辑,你的代码可能会变成下面这样:

java 复制代码
TYPES: BEGIN OF ENUM investment_type.
TYPES low_risk VALUE '#LOW_RISK',
      high_risk VALUE '#HIGH_RISK'.
TYPES END OF ENUM investment_type.

CLASS lcl_interest_calculator DEFINITION.
  PUBLIC SECTION.
    METHODS calculate_interest
      IMPORTING
        principal TYPE f
        years TYPE i
        investment_type TYPE investment_type
      RETURNING
        VALUE(result) TYPE f.
ENDCLASS.

CLASS lcl_interest_calculator IMPLEMENTATION.
  METHOD calculate_interest.
    DATA: interest_rate TYPE f.

    CASE investment_type.
      WHEN investment_type-low_risk.
        interest_rate = 0.03.
      WHEN investment_type-high_risk.
        interest_rate = 0.05.
      WHEN OTHERS.
        RAISE EXCEPTION TYPE cx_sy_illegal_argument
          EXPORTING
            textid = 'Unknown investment type'.
    ENDCASE.

    result = principal + (principal * interest_rate * years).
  ENDMETHOD.
ENDCLASS.

优化后的好处:
  • 更好的可读性和维护性:变量名和常量的引入让代码一目了然,其他开发者将来再看这段代码时理解起来更轻松。
  • 捕获潜在问题:通过改进代码,你可能发现原代码中的隐含错误(例如未处理未知投资类型的情况)。
  • 逐步改善代码库质量:这种点滴的改进积累起来,整个系统的代码质量就会越来越好。

为什么它重要?

  1. 技术债务的治理 : 代码往往随着时间的推移越来越混乱,甚至积累大量"技术债务"。The Boy Scout Rule 就像是日常的清洁和整理,能让技术债务得到缓慢但持续的处理,避免问题堆积成"无法维护的大山"。

  2. 提升团队效率 : 每个人在修改代码时稍微做点力所能及的改进,整个团队的代码质量就会发生质变。未来在调试或扩展功能时,大家能够更高效地完成工作。

  3. 防止"破窗效应" : 如果代码长时间得不到维护,每次有新开发人员碰到一段糟糕的代码时都会想"反正没人改正,我也懒得管",久而久之问题会更严重。The Boy Scout Rule 提倡每次改进一点点,从而避免这种情况。


总结

The Boy Scout Rule 是一种轻量级、长期有效的代码管理策略,它强调 "每日清理" 的意识。在日常开发中,我们不能总是追求完美,但至少可以在我们触碰的地方,尽可能地让它变得更好一点点。

Remember: "Leave the code better than you found it." 👌

相关推荐
哆啦A梦的口袋呀5 小时前
基于Python学习《Head First设计模式》第十章 状态模式
学习·设计模式
电子科技圈10 小时前
IAR开发平台升级Arm和RISC-V开发工具链,加速现代嵌入式系统开发
arm开发·嵌入式硬件·设计模式·性能优化·软件工程·代码规范·risc-v
昕冉11 小时前
利用 Axrue9 中继器实现表格数据的查询
设计模式·设计
摘星编程15 小时前
建造者模式深度解析与实战应用
设计模式·建造者模式·代码重构·对象构建·java实战
周某某~16 小时前
六.原型模式
java·设计模式·原型模式
周某某~17 小时前
五.建造者模式
java·设计模式·建造者模式
qqxhb1 天前
零基础设计模式——行为型模式 - 命令模式
java·设计模式·go·命令模式
蔡蓝1 天前
设计模式-适配器模式
java·设计模式·适配器模式
少女续续念1 天前
【DevOps】测试用例越来越多,质量反而更差了?谈谈现代软件测试的误区与转型
设计模式