開發人員可能聽到過"bad
smell"這個詞,這個詞用在軟體編碼中是什麼意思呢? 代碼還有smell嗎?當然沒有,正如電腦病毒,bug等詞一樣,這隻是個形象的說法。這個
詞在這裡的意思是代碼實現了需求,但是代碼卻不精鍊,冗餘,結構混亂,難讀懂,難維護,難擴充等等。與之相對應的一個詞是"refactor",即代碼重
構。我們在看些外國人寫的程式時可以發現,他們的代碼裡一般會定義大量的類、介面、方法,類與類,類與介面之間很多是繼承和實現的關係,方法的程式碼數很
少,超過20行代碼的方法不多,看他們的代碼感覺最多的就是方法之間的調來調去,不像我們的代碼,一個方法下來幾十上百甚至兩三百行都是最基本的語句構
成,很少調用自己的方法。兩相比較,可以看出,前者在結構上更清晰,通過類別檢視就可看出設計意圖,並且總的代碼量不會高於後者,而後者代碼量龐大,代碼冗
餘現象嚴重,結構不清晰,很難維護,如要修改某個錯誤,可能涉及到要修改的代碼點很多,這樣後來的維護者就很頭疼了。造成這種狀況的原因有這樣一些:
1.經驗不足,分析設計不到位
2.敏捷開發,雖然經驗很多,但為了快速開發,沒有經過分析設計
3.缺乏意識,只為實現功能而寫代碼,不管代碼品質
對於這樣的代碼,我們怎樣將其變得更為精鍊和易於維護呢?這就是代碼重構。重構不是針對功能,純粹是對代碼本身。重構後的代碼不會影響到系統的運行。
我們來看看可以在哪些方面對代碼進行重構:
1.重新命名:對類,介面,方法,屬性等重新命名,以使得更易理解
2.抽取代碼:將方法內的一段代碼抽取為另一個方法,以使得該段代碼可以被其他方法調用,這是重構中很重要很常用的,此舉可以極大的精鍊代碼,減少方法的程式碼數
3.封裝欄位:將類的某個欄位轉換成屬性,可以更加合理的控制欄位的訪問
4.抽取介面:將類的某些屬性,方法抽取組成個介面,該類自動實現該介面
5.提升方法內的局部變數為方法的參數:這主要是在寫代碼的過程中會使用到
6.刪除參數:將方法的一個或多個參數刪掉
7.重排參數:將方法的參數順序重新排列
實際應用中,用的最多的是1、2、3,我們可以在寫代碼的時候有意識的運用代碼重構,這樣當我們完成編碼時代碼的品質也能得到保證。