ABAP設計模式之---“童子軍法則(The Boy Scout Rule)”

法則介紹

The Boy Scout Rule,中文一般翻譯為“童子軍法則”,是一個簡單卻非常有意義的軟件開發原則,它最早由軟件開發大師 Robert C. Martin (Uncle Bob) 在他的《Clean Code》一書中提出。

這條法則的核心思想非常簡單: “確保你離開代碼的時候比你發現它時更干凈。”

在這里插入圖片描述

這條規則借鑒了童子軍的一種行為習慣:在露營時,童子軍團員會遵循一種紀律: 收拾營地時必須比他們到達時更干凈整潔,再離開。我們在編寫和改動代碼時,也可以應用類似的理念。

這并不要求你每次改動代碼時都去對整個代碼庫進行改造或重構,而是盡力讓你涉及的那部分代碼變得更好,比如更易讀、更清晰、更少問題、更優雅。

簡單概括就是:通過日積月累的小改進,逐步提升代碼質量。


舉個例子

場景

假設你是一位開發人員,正在修復一個在上市產品中的bug。你定位問題時,發現這個bug所在的代碼片段是一個結構非常混亂的函數,看起來充滿了臃腫的邏輯、重復代碼和混亂的命名,比如:

CLASS lcl_calculator DEFINITION.PUBLIC SECTION.METHODS calcIMPORTINGp TYPE fy TYPE it TYPE iRETURNINGVALUE(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. 提取重復邏輯:簡化代碼分支。

經過一個簡單的重構,不額外引入新的邏輯,你的代碼可能會變成下面這樣:

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_interestIMPORTINGprincipal TYPE fyears TYPE iinvestment_type TYPE investment_typeRETURNINGVALUE(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_argumentEXPORTINGtextid = '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.” 👌

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/84295.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/84295.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/84295.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

BaikalDB 架構演進實錄:打造融合向量化與 MPP 的 HTAP 查詢引擎

導讀 BaikalDB作為服務百度商業產品的分布式存儲系統,支撐了整個廣告庫海量物料的存儲和OLTP事務處理。隨著數據不斷增長,離線計算時效性和資源需求壓力突顯,基于同一份數據進行OLAP處理也更為經濟便捷,BaikalDB如何在OLTP系統內…

【抖音小程序】通用交易系統-下單問題整理

在通用交易系統中,支付流程如下 1、服務端-預下單:生成參數與簽名信息(此過程不需要與抖音平臺對接) 參考 生成下單參數與簽名_抖音開放平臺 2、小程序用戶端:根據返回的參數與簽名,拉起抖音支付&#x…

模型參數、模型存儲精度、參數與顯存

模型參數量衡量單位 M:百萬(Million) B:十億(Billion) 1 B 1000 M 1B 1000M 1B1000M 參數存儲精度 模型參數是固定的,但是一個參數所表示多少字節不一定,需要看這個參數以什么…

EurekaServer 工作原理

一、核心工作流程 二、核心組件解析 1. 自動配置引擎 入口:EnableEurekaServer 引入 EurekaServerMarkerConfiguration,創建標記Bean Marker觸發條件:EurekaServerAutoConfiguration 檢測到 Marker 存在時激活關鍵Bean初始化: …

Playwright 與 Selenium:自動化測試的兩大主流工具對比

《Playwright 與 Selenium:自動化測試的兩大主流工具對比》 *Playwright 和 Selenium 是自動化測試領域的兩大主流工具,二者在架構設計、功能特性和適用場景上存在顯著差異,以下是核心對比: 一、架構與設計理念 維度Playwright…

網絡編程(Modbus進階)

思維導圖 Modbus RTU(先學一點理論) 概念 Modbus RTU 是工業自動化領域 最廣泛應用的串行通信協議,由 Modicon 公司(現施耐德電氣)于 1979 年推出。它以 高效率、強健性、易實現的特點成為工業控制系統的通信標準。 包…

R語言速釋制劑QBD解決方案之二

影響含量均一性的顯著因子&#xff08;%RSD&#xff09; 數據分析表明含量均一性的彎曲性不顯著。如半正態圖&#xff08;圖12&#xff09;所示&#xff0c;影響含量均一性的顯著因子為A&#xff08;原料藥粒徑&#xff09;和C&#xff08;MCC/Lactose&#xff09;。 mod2 <…

大模型原理、架構與落地

近年來&#xff0c;大模型&#xff08;Large Language Models&#xff0c;LLMs&#xff09;在人工智能領域迅猛發展&#xff0c;從GPT-3到GPT-4、Claude、Gemini、文心一言、GLM等模型相繼發布&#xff0c;大模型已逐漸走出實驗室&#xff0c;邁向產業落地。本文將從技術原理、…

WWDC 2025 macOS 26有哪些更新點

在2025年6月10日凌晨結束的WWDC 2025發布會中&#xff0c;蘋果正式發布了全新的macOS 26&#xff0c;并給其命名為Tahoe。 以下為macOS相關的主要內容&#xff1a; 命名方式改變 蘋果正式將各大系統的版本號改為對應年份&#xff0c;讓命名方式更直觀好記&#xff0c;macOS 2…

AI+預測3D新模型百十個定位預測+膽碼預測+去和尾2025年6月10日第104彈

從今天開始&#xff0c;咱們還是暫時基于舊的模型進行預測&#xff0c;好了&#xff0c;廢話不多說&#xff0c;按照老辦法&#xff0c;重點8-9碼定位&#xff0c;配合三膽下1或下2&#xff0c;殺1-2個和尾&#xff0c;再殺4-5個和值&#xff0c;可以做到100-300注左右。 (1)定…

.NET 8集成阿里云短信服務完全指南【短信接口】

文章目錄 前言一、準備工作1.1 阿里云賬號準備1.2 .NET 8項目創建 二、集成阿里云短信SDK2.1 安裝NuGet包2.2 配置阿里云短信參數2.3 創建配置類 三、實現短信發送服務3.1 創建短信服務接口3.2 實現短信服務3.3 注冊服務 四、創建控制器五、測試與優化5.1 單元測試5.2 性能優化…

解決HuggingFace不能git clone的問題

今天在從HuggingFace上clone項目的時候&#xff0c;一直出現超時問題&#xff0c;查了很多資料沒有解決&#xff0c;后來向mentor請教了一下&#xff0c;可以通過鏡像的方法解決這個問題&#xff0c;所以把方法放上來&#xff0c;希望對大家有幫助。 HuggingFace的服務器在國外…

Zookeeper 集群部署與故障轉移

Zookeeper 介紹 Zookeeper 是一個開源的分布式協調服務&#xff0c;由Apache基金會維護&#xff0c;專為分布式應用提供高可用、強一致性的核心基礎能力。它通過簡單的樹形命名空間&#xff08;稱為ZNode樹&#xff09;存儲數據節點&#xff08;ZNode&#xff09;&#xff0c;…

簡單聊下阿里云DNS劫持事件

阿里云域名被DNS劫持事件 事件總結 根據ICANN規則&#xff0c;域名注冊商&#xff08;Verisign&#xff09;認定aliyuncs.com域名下的部分網站被用于非法活動&#xff08;如傳播惡意軟件&#xff09;&#xff1b;頂級域名DNS服務器將aliyuncs.com域名的DNS記錄統一解析到shado…

服務器出現故障怎么辦?快速排查與解決方法

服務器故障的常見原因分析 硬件故障&#xff1a;內存、硬盤、網絡設備故障。 軟件故障&#xff1a;操作系統、應用程序、數據庫異常。 網絡攻擊&#xff08;如DDoS攻擊&#xff09;造成資源耗盡。 快速排查故障的步驟 檢查監控系統報警日志。 查看系統資源使用情況&#x…

Claude vs ChatGPT vs Gemini:功能對比、使用體驗、適合人群

隨著AI應用全面進入生產力場景&#xff0c;市面上的主流AI對話工具也進入“三國殺”時代&#xff1a; Claude&#xff08;Anthropic&#xff09;&#xff1a;新銳崛起&#xff0c;語言邏輯驚艷&#xff0c;Opus 模型被稱為 GPT-4 殺手ChatGPT&#xff08;OpenAI&#xff09;&a…

Git 使用大全:從入門到精通

Git 是目前最流行的分布式版本控制系統&#xff0c;被廣泛應用于軟件開發中。本文將全面介紹 Git 的各種功能和使用方法&#xff0c;包含大量代碼示例和實踐建議。 文章目錄 Git 基礎概念版本控制系統Git 的特點Git 的三個區域Git 文件狀態 Git 安裝與配置安裝 GitLinuxmacOSWi…

SpringBoot 框架第 1 次接口調用慢

文章目錄 背景分析思路 1:DeepSeek 分析思路 2:日志分析思路 3:Arthas 分析下載 Arthas啟動 Arthastrace 調用耗時分析Controller 調用耗時Service 調用分析ServiceImpl 耗時分析IService 耗時分析BaseMapper 耗時分析debug 執行鏈路MyBatisMapperProxy 解讀解決思路 1:預熱…

數據分析Agent構建

數據分析agent構建 代碼資料來源于 Streamline-Analyst&#xff0c;旨在通過該倉庫上的代碼了解如何使用大語言模型構建數據分析工具&#xff1b; 個人倉庫&#xff1a;Data-Analysis-Agent-Tutorial 不同的在于 Data-Analysis-Agent-Tutorial 是在 Streamline-Analyst 基礎…

Java后端檢查空條件查詢

通過拋出運行異常&#xff1a;throw new RuntimeException("請輸入查詢條件&#xff01;");BranchWarehouseServiceImpl.java // 查詢試劑交易&#xff08;入庫/出庫&#xff09;記錄Overridepublic List<BranchWarehouseTransactions> queryForReagent(Branch…