代碼異味(Code Smell)識別與重構指南

1、引言:什么是“代碼異味”?

在軟件開發中,“代碼異味(Code Smell)”是指那些雖然不會導致程序編譯失敗或運行錯誤,但暗示著潛在設計缺陷或可維護性問題的代碼結構。它們是代碼演進過程中的“信號燈”,提示我們某段代碼可能需要優化。

1.1 ? 為什么關注代碼異味?

  • 預示潛在風險:可能是未來 bug 的溫床
  • 阻礙重構:讓代碼難以理解、測試和修改
  • 影響協作效率:閱讀成本高,新人上手難
  • 降低系統穩定性:頻繁修改易引入錯誤

1.2 ?? 代碼異味 ≠ Bug

特征異味Bug
是否編譯通過否(可能)
是否運行正確
是否需要修復?建議盡早重構必須修復

2、常見的代碼異味類型及其危害

本節將介紹 10 種典型的代碼異味,并提供豐富代碼示例說明其特征及重構建議。

2.1. 長函數(Long Method)

?? 特征:

  • 方法體超過 50 行
  • 包含多個職責邏輯
  • 條件判斷嵌套深

?? 危害:

  • 可讀性差
  • 測試困難
  • 修改容易引入副作用

?? 示例:

public void processOrder(Order order) {if (order == null) throw new IllegalArgumentException();if (order.getItems().isEmpty()) return;double total = 0;for (Item item : order.getItems()) {if (item.getQuantity() > 10) {total += item.getPrice() * item.getQuantity() * 0.9;} else {total += item.getPrice() * item.getQuantity();}}if (order.getCoupon() != null) {total *= order.getCoupon().getDiscountRate();}order.setTotal(total);order.setStatus("PAID");orderRepository.save(order);
}

? 重構建議:

  • 提取子方法,按職責拆分邏輯
  • 使用命名清晰的方法名表達意圖
private double calculateSubtotal(Order order) {return order.getItems().stream().mapToDouble(this::calculateItemPrice)

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

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

相關文章

K8S有狀態服務部署(MySQL、Redis、ES、RabbitMQ、Nacos、ZipKin、Sentinel)

K8S部署MySQL ①、創建配置 ②、創建存儲卷 ③、創建服務 指定配置文件 指定存儲卷 ④、同樣的方式創建mysql-slaver服務(配置文件和mysql-master不同) ⑤、進行主從同步關聯 進入master服務中 進入從庫的終端 K8S部署Redis…

正則表達式與文本三劍客grep、sed、awk

目錄 一、正則表達式 1.1、字符匹配 1.2、次數匹配 1.3、位置錨定 1.4、分組或其他 二、擴展正則表達式 三、grep 四、awk 4.1、常用命令選項 4.2、工作原理 4.3、基礎用法 4.4、內置變量 4.5、模式 4.6、條件判斷 4.7、awk中的循環語句 4.8、數組 4.9、腳本 …

Matlab/Simulink的一些功能用法筆記(4)

水一篇帖子 01--MATLAB工作區的保護眼睛顏色設置 默認的工作區顏色為白色 在網上可以搜索一些保護眼睛的RGB顏色參數設置 在MATLAB中按如下設置: ①點擊預設 ②點擊顏色,點擊背景色的三角標符號 ③點擊更多顏色,找到RGB選項 ④填寫顏色參數…

Qt國際化實戰--精通Qt Linguist工具鏈

概述 在全球化的今天,軟件產品需要支持多種語言和地區,以滿足來自世界各地用戶的需求。Qt框架提供了一套完整的工具集來幫助開發者實現應用程序的國際化(i18n)和本地化(l10n),其中最核心的就是Qt Linguist工具鏈 關于國際化與本地化 國際化(i18n): 指的是設計和開發…

0基礎 | STM32 | STM32F103C8T6開發板 | 項目開發

注:本專題系列基于該開發板進行,會分享源代碼 F103C8T6核心板鏈接: https://pan.baidu.com/s/1EJOlrTcProNQQhdTT_ayUQ 提取碼:8c1w 圖 STM32F103C8T6開發板 1、黑色制版工藝、漂亮、高品質 2、入門級配置STM32芯片(SEM32F103…

【SF順豐】順豐開放平臺API對接(注冊、API測試篇)

1.注冊開發者賬號 注冊地址:順豐企業賬戶中心 2.登錄開發平臺 登錄地址:順豐開放平臺 3.開發者對接 點擊開發者對接 4.創建開發對接應用 開發者應用中“新建應用”創建應用,最多創建應用限制數量5個 注意:需要先復制保存生產校驗…

AI Agent開發第48課-DIFY中利用AI動態判斷下一步流程-DIFY調用API、REDIS、LLM

開篇 之前我們在《AI Agent開發第47課-DIFY處理多步流程慢?你確認用對了?》中講述了DIFY的設計中在整合多步LLM時如避免過多調用LLM的良好設計,并給出了AI工作流的相應設計手法。今天我們要在上一篇的基礎上把“上門維修預約”這個流程進一步按照實際業務需求加入用戶在整個…

剝開 MP4 的 千層 “數字洋蔥”:從外到內拆解通用媒體容器的核心

在當今數字化時代,MP4 格式隨處可見,無論是在線視頻、手機拍攝的短片,還是從各種渠道獲取的音頻視頻文件,MP4 都占據著主流地位。它就像一個萬能的 “數字媒體集裝箱”,高效地整合和傳輸著各種視聽內容。接下來&#x…

JavaScript性能優化實戰:深入探討性能瓶頸與優化技巧

JavaScript性能優化實戰:深入探討性能瓶頸與優化技巧 引言 在當今快速發展的Web世界中,性能已經成為衡量應用質量的關鍵指標。隨著Web應用復雜度的不斷提升,JavaScript作為前端開發的核心語言,其性能優化變得尤為重要。本文旨在全面深入地探討JavaScript性能優化的各個方…

無憂AI綜合插件,可實現圖色識別、機器視覺、圖像編輯等多種功能

說明: 無憂AI綜合插件(vu.dll)是一款功能強大的AI腳本插件,主要用于按鍵精靈、易語言、Python、C/C等輔助制作工具,具有圖像識別、文本識別、鍵盤鼠標、內存操作、AI視覺等多種功能。 其官網地址 無憂 - AI圖色綜合插件 http:www.voouer.com/Plugin 功…

數據中臺產品功能介紹

在數字化轉型浪潮中,數據中臺作為企業數據管理與價值挖掘的核心樞紐,整合分散數據資源,構建統一的數據管理與服務體系。本數據中臺產品涵蓋數據可視化、數據建設、數據治理、數據采集開發和系統管理五大平臺,以豐富且強大的功能模…

opencv之圖像亮度變換和形態學變換(八)

opencv之圖像亮度變換和形態學變換(八) 文章目錄 opencv之圖像亮度變換和形態學變換(八)一、圖像亮度變換1.1 亮度變換1.2 線性變換1.3 直接像素值修改案例 二、形態學變換2.1 核**2.2 腐蝕(Erosion)****2.…

【初階數據結構】樹——二叉樹——堆(中)

文章目錄 前言 一、堆的概念與結構 二、堆的實現 堆的定義 1.初始化堆 2.堆的銷毀 3.堆的插入 3.1向上調整算法 4.堆的判空 5.求有效個數 6.刪除堆頂數據 6.1向下調整算法 7.獲取棧頂數據 三、完整源碼 總結 前言 上篇了解樹和二叉樹相關的概念,這篇學習一種特殊的…

AM剪輯軟件漢化版:簡單易用,開啟視頻創作之旅

在短視頻流量時代,視頻剪輯已經成為許多人表達自我和記錄生活的重要方式。無論是分享日常點滴、制作創意視頻還是進行專業內容創作,一款功能強大且操作簡便的視頻剪輯軟件是必不可少的。今天,我們要介紹的 AM剪輯軟件漢化版,就是這…

llfc項目分布式服務筆記

一、系統整體架構流程圖(簡明版) 復制代碼 +---------------+ +------------------+ +----------------+ | 客戶端 (Client) |--------->| GateServer |----------| StatusServer |<--+ +---------------+ +--------------…

C++如何設計和實現緩存(cache)來減少對后端存儲的訪問壓力

隨著數據量的激增和用戶對低延遲、高吞吐量需求的不斷提升,如何減少系統瓶頸、提升響應速度成為了開發者的核心挑戰之一。在這一背景下,緩存(cache)作為一種關鍵的技術手段,逐漸成為解決性能問題的核心策略。緩存的本質是通過存儲頻繁訪問的數據或計算結果,減少對后端存儲…

華為設備端口隔離

端口隔離的理論與配置指南 一、端口隔離的理論 基本概念 端口隔離&#xff08;Port Isolation&#xff09;是一種在交換機上實現的安全功能&#xff0c;用于限制同一VLAN內指定端口間的二層通信。被隔離的端口之間無法直接通信&#xff0c;但可通過上行端口訪問公共資源&#…

1688平臺商品詳情接口開發指南(含Python代碼示例)

接口概述 1688開放平臺提供的商品詳情接口&#xff08;item_get&#xff09;是獲取商品核心數據的重要API&#xff0c;開發者可通過該接口獲取商品標題、價格、規格參數、圖片等詳細信息。本文重點解析標題字段的獲取方式&#xff0c;并提供完整代碼示例。 接口請求參數 基礎…

Edge瀏覽器PDF字體顯示錯誤

Edge瀏覽器PDF字體顯示錯誤 軟件版本信息 Edge Version: 136.0.3240.50 Word Version: Microsoft Office 專業增強版2021問題描述 在Word中使用多級列表自動編號, 并使用Word軟件自帶的導出為PDF文件功能, 在Word中顯示正常的數字, 在Edge中查看PDF將會出現渲染錯誤的現象,…

Redis能保證數據不丟失嗎之AOF

我們都知道,Redis是一個基于內存的k-v數據庫,既然是基于內存的,那么Redis如何保證數據不丟失?以及真的能做到數據的百分百不丟失嗎? 為什么Redis數據需要持久化機制? Redis的一個常用場景是緩存,通常緩存丟失的話,我們也可以從數據庫中重新找回,那么為什么Redis還需…