重構
所謂重構(refactoring)是這樣一個過程:
在不改變代碼外在行爲的前提下,對代碼做出修改,已改進程序的內部結構。使其程序的設計模式和架構更趨合理,提高軟件的擴展性和維護性。
在工作之中,和其他同行聊起幾年前以前共同開發的項目,聊到了現在發現的原有框架上的一些問題,並探討更好的解決方案。
在他的推薦下,我入了《重構 改善既有代碼的設計 第2版》一書。
好記性不如爛筆頭。
我在此記錄一下閱讀此書的筆記。
他們的看法
以下是行業內的人閱讀此書的一些看法摘抄:
-
對於軟件工程師來說,重構,並不是額外的工作,它就是編碼本身。——喬樑,騰訊高級管理顧問
-
應該去追求編寫人能讀懂的而不是僅機器能讀懂的代碼。——閻華,京東7FRESH架構師
-
軟件不死,重構不歇。——餘晟,《代碼簡潔之道:程序員的職業素養》譯者
-
持續優化已有代碼是維護系統生命力的最好方法。——楊衛華,微博研發副總經理
-
深入地理解架構、理解業務、理解需求,減少因設計失誤而導致徒勞無益的反覆重構。——莊表偉,開源社區理事
重構心法
王建(譯者同事)的十六字重構心法:
舊的不變,
新的創建,
一步切換,
舊的再見。
重構第一示例
將一個業務複雜的單方法拆分成多個方法。
已達到主方法功能可讀易理解的效果。
有一點向爲一篇很長的文章整理段落,提煉標題;使比人能夠很容易的瞭解文章大體內容。
第一示例用到了以下重構方法:
- 提煉函數(把一塊代碼單獨提取成一個函數)
- 查詢取代臨時變量(函數參數:把能從現有參數中得到的變量取消掉)
- 內聯變量(函數內部:取消臨時變量)
- 改變函數聲明(修改函數名稱,使之能清晰的描述其作用)
- 移動語句(函數內部:將變量聲明移動到緊鄰循環的位置)
- 拆分循環(將同一函數下的多個邏輯單獨創建循環)
關於程序性能
先做重構,再做性能優化。
在此過程中犧牲了部分程序性能,但是對引用的影響微乎其微的。
對性能有較大影響時也不要慌,先重構是爲了後面的更好的調優。
重構的好習慣
- 重構前,先準備一套可靠的測試集,這些測試必須有自我檢驗能力。
- 小步伐修改程序,以便出錯時發現問題,不能急於求成。這一點對於已上線應用的系統尤爲重要。
- 把代碼推送(push)到遠端倉庫前,把零碎的修改壓縮成一個更有意義的提交(commit).
編碼風格
變量改名
- 永遠將函數的返回值命名爲“result”。
金額計算
- 將貨幣以分爲單位存儲,可以避免使用浮點數又不影響數學操作。