第三章 代碼的壞味道3.1 神秘命名命名是編程中很難的事情,所以最常用的重構(gòu)手段就是去改個名字。 如果你發(fā)現(xiàn)改名很難,那就說明代碼設(shè)計有問題。 3.2 重復(fù)代碼同一類的兩個函數(shù)含有相同的表達(dá)式,就應(yīng)該提煉。 3.3 過長函數(shù)活得最長,最好的函數(shù),一般都很短。 如果你覺得需要寫注釋,大部分情況就代表這個東西需要寫進(jìn)一個獨(dú)立的函數(shù)里面,然后根據(jù)用途來命名比較好。 3.4 過長的參數(shù)列表將幾個函數(shù)共用的參數(shù)抽象成類,然后再調(diào)用類。 3.5 全局?jǐn)?shù)據(jù)全局?jǐn)?shù)據(jù)的問題是,全局?jǐn)?shù)據(jù)在任何地方都可以被修改。 所以正確的做法是將全局?jǐn)?shù)據(jù)封裝起來,用函數(shù)將其包起來,這樣就知道那些地方修改了它。 3.6 可變數(shù)據(jù)核心是縮小作用域。 3.7 發(fā)散式變化如果這個模塊,加不同原因的需求的時候,修改的模塊都不相同的話,你需要考慮是否要分離出來。比如說你加入redis需要改3個地方,加入mysql需要改4個地方,你就應(yīng)該抽離出來。 3.8 霰彈式修改在每次修改的時候,應(yīng)該只修改一處,而不是到處的修改。如果你說你要加入一個數(shù)據(jù)庫,需要修改3個函數(shù),那么這就需要思考,你是否應(yīng)該抽離出來。 3.9 依戀情結(jié)模塊化,力求代碼分出區(qū)域,最大化區(qū)域內(nèi)部交互,最小化區(qū)域間交互。 如果兩個模塊交互頻繁,你應(yīng)該合并在一起。 3.10 數(shù)據(jù)泥團(tuán)如果在多個類中,出現(xiàn)了很多相同項的數(shù)據(jù),你需要想想是否要抽離出來一個對象。 3.11 基本類型偏執(zhí)我們應(yīng)該創(chuàng)建對象,而不是用一個字符串來寫任何東西。 比如有程序員用字符串來表示電話號碼,實際上你應(yīng)該抽象出來一個電話號碼對象。 3.12 重復(fù)的switchswitch這個東西就不應(yīng)該存在。 3.13 循環(huán)語句我們應(yīng)該用管道操作來替代循環(huán),這樣能更看清被處理的元素和處理他們的動作。 3.14 冗贅的元素能簡單的代碼,盡量簡單。未來變復(fù)雜的時候,再去考慮它。 3.15 夸夸其談通用型同上。 3.16 臨時字段臨時的字段不應(yīng)該存在。 3.17 過長的消息鏈如果關(guān)系過長,你最好提煉函數(shù)。 ...... (省略其中的很多點(diǎn)) 3.24 注釋注釋是提示你,這個地方該重構(gòu)啦。 如果你覺得需要寫注釋的時候,請先重構(gòu),試著讓所有注釋都變得多余。 來源:https://www./content-4-614201.html |
|