国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

用實例告訴你如何重構帶有壞味道的代碼

開發 后端
如果出現了代碼壞味道,說明你的代碼寫得不夠好,需要重構才能讓它們變成干凈的代碼。在這篇文章中,我將通過 GitHub 上的真實項目來解釋代碼壞味道,并向你展示如何重構這些帶有壞味道的代碼。

[[241428]]

如果出現了代碼壞味道,說明你的代碼寫得不夠好,需要重構才能讓它們變成干凈的代碼。在這篇文章中,我將通過 GitHub 上的真實項目來解釋代碼壞味道,并向你展示如何重構這些帶有壞味道的代碼。

重復代碼和重復邏輯

開發人員通常很懶惰,在某種程度上,這不算一件壞事。然而,因為懶惰而走上了復制黏貼代碼的不歸路那就不對了。這樣可能會導致最常見的代碼壞味道,即邏輯重復,如下所示。

為了擺脫這種代碼壞味道,我們需要將紅色部分提取到一個單獨的方法中,這樣就可以在其他地方重用它們。

長方法和臃腫的類

我們都會犯這樣的一個錯誤:在現有方法中添加 if() 或 for() 語句來驗證用戶輸入或檢查用戶是否已登錄。我們其實不應該這樣做。如果一定要做這些驗證,應該創建自己的方法。方法長度應該在 4 到 20 行之間,如果超過 20 行,可以將其中的幾行提取到另一個方法中。同樣的規則也適用于類,根據單一責任原則,方法或類越小越好。

相同或不同類中的重復方法

另一個代碼壞味道是多個方法提供了相同的功能,如下圖所示。

 

分散式變更(Divergent Change)

如果你了解 SOLID 原則,特別是單一職責原則,那么你就應該知道,修改一個類的理由應該是單一的。也就是說,User 類不應具有與產品或文件轉換相關的功能。你可以通過將不相關的方法提取到 Product 類或 FileSystem 類來清除這個代碼壞味道。

散彈式變更(Shotgun Surgery)

這與發散變更完全相反。這種代碼壞味道會讓你因為一個需求而去修改多個類。例如,你想要創建一個新的用戶規則(如“Supper-Admin”),然后你發現,為了增加這個規則還需要修改 Profile、Products 和 Employees 類中的某些方法。在這種情況下,可以考慮將這些方法放在一個單獨的類中。

依戀情結(Feature Envy)

有時候,你會在類中找到一個大量使用另一個類的方法。在這種情況下,你可以考慮將這個方法移動到它使用的那個類中。如下圖所示。將 getFullAddress() 從 User 類移動到 ContactInfo 類中豈不是更好?因為它調用了 ContactInfo 類的很多方法。

 

數據泥團(Data Clumps)

有時候,你會發現很多函數具有相同的參數列表,這樣會導致數泥團代碼壞味道。看看下面的例子,你會發現,幾乎所有類型的預訂都需要護照信息。

 

在這種情況下,將護照信息移到 PassportInfo 類中,然后將 PassportInfo 對象傳給預訂方法,這樣會更好。這是一個很好的重用代碼的例子。請記住,參數列表太長可能更容易導致 bug 和代碼沖突,而且難以進行單元測試。

 

癡迷基本類型(Primitive Obsession)

當你在應用程序的所有地方都使用基本數據類型時,就會出現這種代碼壞味道。例如,使用整數表示電話號碼,使用字符串表示貨幣符號。如果你是這么做的,那么請先看一下下面這個類。

 

代碼中的地址被定義為數組,這樣會導致兩個問題,例如,每次我們需要使用地址時都要對其進行硬編碼。那么,為什么不創建一個 Address 類呢?

 

現在,每次我們需要添加或編輯地址時,只需要修改 Address 類。此外,如果我們需要添加一個新的“聯系我們”方法,就增加一個新的 ContactUs 類。這樣,每個類都有自己的單一職責。

switch 語句

或許你很想知道為什么使用 switch 語句其實是件很糟糕的事情。雖說使用 switch 語句并不一定總是不好的,但在下面的示例中,你可以看到,switch 語句的代碼塊不僅很大而且是不可提取的。當代碼塊變得越來越大時,你將無法將其拆分成更小的方法。

 

如果你的 switch 語句代碼塊不是很大,那么你可以繼續使用它們。例如,工廠模式就使用了 switch 語句。

 

并行繼承

有時候我會想,并行繼承是不是一種不好的做法。先讓我們來解釋一下并行繼承的概念,然后再討論它是不是代碼壞味道。

 

從上圖中可以看出,每當我們創建一個新的部門類時,我們還需要創建一個權限類,這將導致之前提到的散彈式變更代碼壞味道。

懶惰類

懶惰類是指只做很少事情的類。還記得這些下面這些代碼嗎?

 

 

我們將地址移到一個單獨的類中,但我們沒有對熱線也這么做,因為它可能只有 3 行代碼。所以,一旦你發現了這些懶惰類,應該將它們移除。

臨時字段

當一個類實例的某些變量只是偶爾用到,就出出現臨時字段代碼壞味道。請看下面的例子,你會注意到 $name 和 $contactDetails 只在 notify() 方法中用到。

 

那么為什么不將它們作為方法參數進行傳遞呢。

 

消息鏈

當一個類使用了另一個類,而那個類又使用了另外一個類,并以此類推,那么就會出現消息鏈代碼壞味道。在下圖中,你可以看到 Employee->EmployeeConfig->Config。

 

你可以通過縮短鏈(變成 Employee->Config)讓代碼變得更整潔。

 

不恰當的親密關系

有時候,一個類的某個方法需要過多地了解另一個類的內部狀態或數據。正如你在下圖中所看到的,notify() 方法位于 User Class 中,但它卻使用了 UserContactDetails 類的很多內部方法。

 

在這種情況下,***可以將這些邏輯從 User 類移動到 UserContactDetails 類中,并新增 getWelcomeMessage($userName) 方法。

 

中間人

有時候,你會發現一個類的很多方法什么事都不做,只是將調用委托給另一個類。在這種情況下,這個類被認為是中間人,大多數時候可以避免使用它。

 

注意:在 Facade 設計模式中,中間人在某些情況下可能會有所幫助。

接口不同但目的相同的類

通常,因為團隊之間缺乏溝通,創建了兩個不同的類,但它們的作用卻是一樣的,這意味著出現了重復代碼。

不完整的庫

第三方庫并不總能為你提供應用程序中所需的所有功能。在下面的示例中,處理文檔的庫可以通過 ID 獲取一個文檔或一次獲取所有的文檔。

 

如果你需要獲取特定用戶的所有文檔該怎么辦?在這種情況下,你需要擴展 Document 類的功能,而不直接修改原始類。這個時候可以使用裝飾模式,如下圖所示。

 

現在,你可以使用 DocumentsDecorator 類而不是 Documents 類。

注釋

你可能會感到驚訝,但錯誤地使用注釋也是一種代碼壞味道。下面是我的一些建議:

  • 刪除不必要的注釋。
  • 如果代碼很容易理解,請不要添加額外的注釋。
  • 不要留下被注釋的舊代碼。
  • 刪除用于調試的注釋,如 var_dump、echo 等。

夸夸其談未來性(Speculative Generality)

這個代碼壞味道與過早進行優化有關,很多開發人員都沒有注意到這一點。在規劃期間需要考慮的一些注意事項:

  • 不要過度計劃你的代碼。
  • 不要試圖涵蓋只有 1%可能性會在未來發生的情況。
  • 為了讓算法更簡單,可以犧牲一些速度,特別是當你不需要應用程序立即給出結果的時候。
  • 當應用程序速度很慢,即使只有 100 個用戶,也需要進行優化。

英文原文:https://codeburst.io/write-clean-code-and-get-rid-of-code-smells-aea271f30318 

【責任編輯:龐桂玉 TEL:(010)68476606】

責任編輯:龐桂玉 來源: 前端之巔
相關推薦

2019-10-11 09:07:46

Java代碼對象

2020-06-12 08:21:58

JavaScript代碼開發

2024-09-05 10:17:34

2012-07-13 09:38:15

項目代碼

2015-07-29 13:22:40

.NET代碼

2012-07-13 09:35:58

PHP

2021-05-26 11:50:37

代碼優化Java

2012-07-19 10:42:17

項目

2022-01-26 10:29:24

微服務循環依賴代碼

2012-07-27 10:30:12

重構

2024-12-11 18:24:29

2022-03-10 09:49:58

重構代碼

2019-04-03 08:10:17

代碼架構信息

2024-09-27 12:04:48

2015-10-23 09:35:57

融資YC創始人投資

2014-11-05 10:58:00

編程

2018-11-06 13:24:27

爬蟲分析房租

2022-05-07 10:01:20

好代碼壞代碼

2016-09-25 16:02:09

《硅谷》編程虛擬內存

2017-10-11 09:41:03

谷歌
點贊
收藏

51CTO技術棧公眾號

亚洲狼人国产精品| 国产视频不卡一区| 欧美国产日产韩国视频| 黄色片免费在线观看| 亚洲精品免费看| 欧美网站免费观看| 黑人精品欧美一区二区蜜桃| 91精品久久久久久| 经典一区二区| 欧美精品18videos性欧| 全球最大av网站久久| 精品精品国产高清a毛片牛牛| 日本中文字幕在线看| 岛国精品视频在线播放| 亚洲男男gay视频| 一区免费观看视频| 99aiav| 国产精品久久毛片| 国产成人黄色网址| 国产欧美精品区一区二区三区| 久久精品视频16| 成人国产电影网| 欧美黄色一级片视频| 国产日韩精品一区二区三区 | 成人日韩视频| 最新日韩中文字幕| 99精品美女视频在线观看热舞| 国产亚洲欧美视频| 91成人福利社区| 久久久天堂国产精品女人| 国产精品巨作av| 国产精品激情av在线播放| 欧美理论视频| 国产传媒一区| 日本美女一区二区三区| 在线亚洲美日韩| 国产成人av福利| 逼特逼视频在线| 一区二区三区欧美日韩| 一区二区三区四区在线免费视频| 五月天国产精品| 国产精品久久一区二区三区不卡 | 日韩毛片在线免费看| 国产精品美女久久久久av爽李琼| 四虎av网址| 欧美日韩中文字幕在线视频| 午夜老司机在线观看| 亚洲国产精品推荐| 国产日本亚洲| 成人自拍性视频| 久久丁香综合五月国产三级网站| 91精品国产91久久久久麻豆 主演| 欧美国产一区二区在线观看| 欧美h版电影| 日韩欧美区一区二| 国内欧美日韩| 国产精品久久久久久久久免费 | jizz亚洲| 亚洲人成在线一二| 欧美黑人做爰爽爽爽| 成人疯狂猛交xxx| 日韩国产成人精品| 日本成年人网址| 日韩欧美亚洲成人| 日韩影片中文字幕| 国产精品入口日韩视频大尺度| 久久精品女人天堂| 亚洲人辣妹窥探嘘嘘| 精品视频一区二区三区免费| 中文另类视频| 亚洲永久在线观看| 97精品久久久久中文字幕| 香蕉视频在线观看网站| 亚洲精品www久久久久久广东| 美国成人xxx| 蜜桃视频在线观看91| 国产亚洲成aⅴ人片在线观看| 国自产拍在线网站网址视频| 116美女写真午夜一级久久| 亚洲激情图片qvod| 男人的天堂av高清在线| 亚洲高清不卡av| 亚洲精品a区| 国产麻豆日韩| 91蝌蚪porny| 欧美偷拍视频| 久久99热这里只有精品国产| 亚洲国产日韩欧美一区二区三区| 无码人妻丰满熟妇区96| 欧美日韩黄色影视| 巨人精品**| 天堂资源在线亚洲资源| 亚洲精品菠萝久久久久久久| 91九色美女在线视频| 国产日本欧美一区二区三区在线| 风间由美一区二区三区在线观看| 日本啊v在线| 欧美黑人xxxⅹ高潮交| 日韩不卡手机在线v区| gogogo影视剧免费观看在线观看| 亚洲欧美综合精品久久成人| 欧美女激情福利| 四虎最新地址发布| 色婷婷久久一区二区| 亚洲欧美成人| 国产在线视频综合| 亚洲一级在线| 国产三级免费观看| 亚洲成人网久久久| 91偷拍一区二区三区精品| 欧美日韩视频免费在线观看| 婷婷久久综合九色综合伊人色| 日韩三级久久| 成年在线观看视频| 日韩美女视频一区二区在线观看| 欧美三级网页| 亚洲成人天堂| 国产精品综合久久久| 亚洲国产成人午夜在线一区| 福利一区二区免费视频| 亚洲一区二区在线观| 日韩三级av在线播放| 亚洲国产一区二区在线观看 | 亚洲日本免费电影| 一区二区欧美日韩| 日韩欧美国产综合一区| 亚洲人成人一区二区三区| 久蕉在线视频| 成人精品一区二区三区电影免费| 中文字幕中文乱码欧美一区二区| 九色精品蝌蚪| 久久久久国产精品熟女影院| xvideos亚洲人网站| 99久久夜色精品国产网站| 日韩av电影资源网| 久久国产精品视频在线观看| 在线观看日韩欧美| av日韩在线网站| 国产一区一区| 国产一区二区在线免费播放| 欧美日本亚洲视频| 亚洲天堂成人在线观看| 综合亚洲自拍| 中文在线观看视频| 欧美激情成人在线| 伊人久久成人| 最新亚洲人成网站在线观看| 2023亚洲男人天堂| 亚洲欧美日韩电影| 中文字幕中文字幕精品| 婷婷亚洲天堂| 国产精品永久免费| 精品欧美一区二区三区| 亚洲字幕久久| 国产网站在线免费观看| 欧美日韩国产不卡在线看| 精品久久久三级丝袜| 久久se这里有精品| 国产精品极品美女在线观看| 国产一级不卡视频| 欧美日本精品在线| 亚洲老司机在线| 欧美日韩电影一区二区| wwwwxxxx在线观看| 99re在线播放| 制服丝袜成人动漫| 国产麻豆视频一区| aiai久久| 国产一区二区影视| 欧美国产综合视频| 亚洲石原莉奈一区二区在线观看| 91女厕偷拍女厕偷拍高清| 国产女人18毛片水真多18精品| 922tv免费观看在线| 亚洲www在线| 精品黑人一区二区三区久久| 不卡视频在线观看| 亚洲资源网站| www在线免费观看视频| 亚洲国产欧美在线| 香蕉久久一区二区不卡无毒影院 | 国产精品久久久久久久岛一牛影视 | 欧美国产日韩一区二区| 天天爽人人爽夜夜爽| www.久久久| 蜜桃视频日韩| 久久福利电影| www国产精品内射老熟女| 午夜在线不卡| 综合一区二区三区| 日韩高清免费观看| 在线视频专区| 亚洲国产精品一区制服丝袜| 国产黄色精品视频| 亚洲国产成人久久综合| 国产中文字幕在线免费观看| 欧美123区| 成人一区在线观看| 欧美在线视频全部完| 欧美精品欧美精品系列|