重構(gòu)的定義
- 名詞:對軟件內(nèi)部結(jié)構(gòu)的一種調(diào)整,目的是在不改變軟件可觀察行為的前提下,提高其可理解性晌纫,降低修改成本
- 動詞:使用一系列重構(gòu)手法,在不改變軟件可觀察行為的前提下調(diào)整其結(jié)構(gòu)
- 所以重點是使軟件更容易被理解和修改永丝,不改變軟件可觀察行為即軟件功能一如既往
何時重構(gòu)
- 添加功能時重構(gòu)
重構(gòu)是一個快速流暢的過程锹漱,幫助理解代碼邏輯 - 修補錯誤時重構(gòu)
- 復(fù)審代碼時重構(gòu)
間接層
- 大多數(shù)重構(gòu)都為程序引入了更多間接層,重構(gòu)往往把大型對象拆成多個小型對象慕嚷,把大型函數(shù)拆成多個小型函數(shù)
- 間接層的價值:
1:允許邏輯共享
2:分開解釋意圖和實現(xiàn)哥牍,根據(jù)新的類或函數(shù)名稱
3:隔離變化,不需要擔(dān)心一個對象的修改會影響到其他使用的地方
4:封裝條件邏輯喝检,使用多態(tài)方式靈活而清晰地表達條件邏輯
重構(gòu)的難題
現(xiàn)在我們只能明顯看到重構(gòu)的好處嗅辣,但是還沒有獲得足夠的經(jīng)驗知道其局限性
- 數(shù)據(jù)庫
當(dāng)數(shù)據(jù)庫模型和對象模型變的不穩(wěn)定時,可以在之間插入一個分隔層挠说,幫助隔離兩個模型各自的變化 - 修改接口
重構(gòu)修改已發(fā)布接口時必須做到原始功能的兼容澡谭,可以盡量讓舊接口調(diào)用新接口并將老接口標(biāo)記為deprecated,并且謹慎發(fā)布接口 - 難以通過重構(gòu)手法完成的設(shè)計改動
可能存在某些核心設(shè)計決策损俭,無法以重構(gòu)手法修改蛙奖,可能就需要對選擇候選設(shè)計方案時的難度進行考慮。 - 何時不該重構(gòu)
將大塊頭軟件重構(gòu)為封裝良好的小型組件杆兵,然后逐一對組件做出重構(gòu)或重建的決定
重構(gòu)與性能
不應(yīng)該為了提高設(shè)計的純潔性而忽視性能