6個重構(gòu)方法可幫你提升80%的代碼質(zhì)量
在過去做了不少代碼走讀,發(fā)現(xiàn)了一些代碼質(zhì)量上比較普遍的問題,以下是其中的前五名:
-
臃腫的類: 類之所以會臃腫,是因為開發(fā)者缺乏對最基本的編碼原則,即“單一職責(zé)原則”(SRP)的理解。這些類往往會變得很臃腫,是由于不同的且在功能上缺少關(guān)聯(lián)的方法都放在了相同的類里面。
-
長方法: 方法之所以會變得很長主要是有以下幾個原因:
-
許多沒有關(guān)聯(lián)性的、功能復(fù)雜的模塊的代碼都放在相同的方法內(nèi)。這主要是開發(fā)者缺乏SRP的概念。
-
多種條件都放在同一個方法內(nèi),這在長方法內(nèi)經(jīng)常會發(fā)生的。這是由于缺乏McCabe代碼復(fù)雜度和SRP的概念的比較。
-
-
大量的傳參: 我經(jīng)常遇到這幾種情況,一些方法跟另一些方法進行交互,或者調(diào)用另一些方法的時候傳入大量的參數(shù)。這就會出現(xiàn)如果更改了其中一個參數(shù),就得在多個方法內(nèi)進行更改。
-
常量值無處不在: 經(jīng)常會發(fā)現(xiàn)開發(fā)者(尤其是新手)會使用一些具有明確含義的常量值(主要是魔鬼數(shù)字),但沒有給它們賦予合適的常量變量。這會降低代碼的可讀性和可理解性。
-
模糊的方法名: 許多時候,以下取的方法名會影響代碼的可讀性和可理解性:
-
模糊的不具有任何意義的方法名
-
技術(shù)性的,卻沒有提及相關(guān)領(lǐng)域的名稱
-
6個處理上面代碼異味的重構(gòu)方法(手法)
以下是6個可以用來幫助你解決80%(80-20原則)的代碼質(zhì)量問題的重構(gòu)方法,并能幫助你成為一個更優(yōu)秀的開發(fā)者。
- 提取類/抽離方法:正如上面提到的,像“臃腫的類”(一個類提供了本該有幾個類提供的功能)這種代碼異味應(yīng)該將原有類中的方法和屬性移動到適當(dāng)數(shù)目的新類中去。舊類中對應(yīng)新類的方法和屬性應(yīng)該被移除。另外,有時候一些類過于臃腫是因為它包含了被其他類使用本應(yīng)該是其他類的成員方法的成員方法。這些方法也應(yīng)該被遷移到合適的類中。
- 提取方法:像上面提到的“過長的方法”這種代碼異味可以通過從舊方法中提取代碼到一個或多個新方法中消除。
- 分離條件:許多時候,一個方法很長是因為包含好幾個分支語句(if-else)。這些分支條件可以被提取和移動到幾個單獨的方法中。這確實能大大改善代碼可讀性和可理解性。
- 引入?yún)?shù)對象/保留全局對象:在我做代碼審查時發(fā)現(xiàn)另外一個很常見的情況 - 好幾個參數(shù)被傳入方法。問題主要與需要從已有方法中增加或者移除一個方法參數(shù)有關(guān)。在這種場景,建議將相關(guān)方法參數(shù)組成一個對象(引入?yún)?shù)對象),讓方法傳遞這些對象而不是每個單獨的參數(shù)。
- 用符號常量替換魔法數(shù)字:對于有意義的并且到處被使用的字面常量,應(yīng)該為它們分配一個命名常量。這能大大增強代碼可讀性和可理解性。
- 重命名方法: 正如上面提到的,模糊不清的方法名會影響代碼的可使用性。這些模糊不清的名稱應(yīng)該重命名為有意義的可能與業(yè)務(wù)術(shù)語有關(guān)的名稱,來幫助開發(fā)者通過業(yè)務(wù)上下文 更好地理解代碼。這很需要技巧并且要求開發(fā)者與業(yè)務(wù)專家一起協(xié)作來理清代碼需要滿足的業(yè)務(wù)需求。有趣的是,這種重構(gòu)方法看起來似乎非常容易理解,但是常常 被許多開發(fā)者忽視,雖然在Eclipse這種IDE的refactor菜單項中經(jīng)常出現(xiàn)這一項。
原文鏈接:http://vitalflux.com/top-6-refactoring-patterns-to-help-you-score-80-in-code-quality/
譯文鏈接:http://www.oschina.net/translate/top-6-refactoring-patterns-to-help-you-score-80-in-code-quality