摘要:難以通過重構(gòu)手法完成設(shè)計的改動先想像重構(gòu)的情況。何時不該重構(gòu)現(xiàn)有代碼根本不能正常運作?,F(xiàn)在,我可以修改這個子類而不必承擔午一中影響另一處的風險。
重構(gòu):對軟件內(nèi)部結(jié)構(gòu)的一種調(diào)整,目的是再不改變軟件的可觀察行為的前提下,提高其可理解性,降低其修改成本。兩頂帽子
添加新功能 添加新功能時不應(yīng)該修改既有代碼,只管添加新功能,通過測試
重構(gòu) 重構(gòu)時你就不能再添加功能,只管改進程序結(jié)構(gòu),此時你不應(yīng)該添加任何測試,只在絕對必要(用以處理接口變化)時才修改測試
重構(gòu)改進軟件設(shè)計
重構(gòu)使軟件更容易理解1
重構(gòu)幫助找到bug
重構(gòu)提高編程速度2
何時重構(gòu)
三次法則:
第一次做某件事時只管去做;第二次做類似的事會產(chǎn)生反感第三次再做類似的事,你就應(yīng)該重構(gòu)。(事不過三,三則重構(gòu))
添加功能時重構(gòu)
修補錯誤時重構(gòu)
重構(gòu)的難題數(shù)據(jù)庫重構(gòu)
修改接口
讓舊接口調(diào)用新接口,當你要修改某個函數(shù)的名稱時請留下舊函數(shù),讓它調(diào)用新函數(shù)。千萬不要復制函數(shù)實現(xiàn),那會讓你陷入重復代碼的泥淖中難以自拔。你還應(yīng)該使用java中depreciation注解,將舊接口標記為@deprecated。
難以通過重構(gòu)手法完成設(shè)計的改動
先想像重構(gòu)的情況??紤]選設(shè)計方案時,我會問自己:將某個設(shè)計重構(gòu)為另一個設(shè)計的難度又多大?看上去很簡單,我就不必太擔心選擇是否得當,于是我就會選擇最簡單的設(shè)計,哪怕他不能覆蓋所有潛在的需求也沒關(guān)系,但如果預先看不到簡單的重構(gòu)辦法,我就會在設(shè)計上投入更多的力氣。
何時不該重構(gòu)
現(xiàn)有代碼根本不能正常運作。重構(gòu)之前,代碼必須起碼能夠在大部分情況下正常運作 如果項目已近最后的期限,你也應(yīng)該避免重構(gòu),如果項目已經(jīng)非常接近最后期限,你不應(yīng)該再分心于重構(gòu),因為已經(jīng)沒有時間了。重構(gòu)能夠提高生產(chǎn)力如果最后你沒有足夠時間,通常就表示你其實早該進行重構(gòu)。
如果選擇重構(gòu),問題的重點就改變了,你仍然做預先設(shè)計,但是不必一定找出正確的解決方案,此刻的你只需要得到一個足夠合理的解決方案就夠了。
有了重構(gòu),你就可以通過一條不同的途徑來應(yīng)付變化帶來的風險。你仍舊需要思考潛在的變化,仍舊需要考慮靈活的解決方案。但是你不必再主意實現(xiàn)這些解決方案而是應(yīng)該問問自己:"把一個簡單的解決方案重構(gòu)成這個靈活的方案又多大難度?"如果答案是“相當容易”,那么就只需要實現(xiàn)目前的簡單方案就行了。
間接層和重構(gòu)(間接層的價值)
允許邏輯共享
比如說一個子函數(shù)再兩個不同的地點被調(diào)用,或超類中的某個函數(shù)被所有子類共享
分開解釋意圖和實現(xiàn)
你可以選擇每個類和函數(shù)的名字,這給你一個解釋自己意圖的機會。類或函數(shù)內(nèi)部則解釋實現(xiàn)了這個意圖的做法。如果類和函數(shù)內(nèi)部又以更小單元的意圖來編寫,你所寫的代碼就可以描述其結(jié)構(gòu)中的大部分重要信息
隔離變化
很可能我在兩個不同的地點使用同一對象,其中一個地點我想改變對象行為,但如果修改了它,我就要冒同時影響兩處的風險。為此我做出一個子類,并在需要修改出引用這個子類?,F(xiàn)在,我可以修改這個子類而不必承擔午一中影響另一處的風險。
封裝條件邏輯
對象有一種奇妙的消息機制:多態(tài)消息,可以靈活而清晰地表達條件邏輯。將條件邏輯轉(zhuǎn)化為消息形式,往往能降低代碼的重復,增加清晰度并提高彈性。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/72469.html
摘要:壞的味道指的是應(yīng)該被修改,被重構(gòu)的代碼,不具有可讀性,復用性,判斷邏輯復雜,冗余代碼。它們通常能指出代碼用途和實現(xiàn)手法之間的語義距離。把所有和這個變量相關(guān)的代碼新建一個類放入。但這往往不夠,請反復運用將某些行為移入類,直到者的協(xié)議一致為止。 壞的味道:指的是應(yīng)該被修改,被重構(gòu)的代碼,不具有可讀性,復用性,判斷邏輯復雜,冗余代碼。應(yīng)該使用各種重構(gòu)的手法去改變它! Duplicated...
摘要:改進代碼設(shè)計的一個重要原則就是消除重復代碼使軟件更容易被理解優(yōu)秀的代碼能夠讓接收你代碼的付出更少的學習成本。重構(gòu)更容易找到重構(gòu)能加深對代碼的理解??梢灾貥?gòu)的情況添加功能時可以重構(gòu)。說明你沒有發(fā)現(xiàn)代碼的錯誤。需要重構(gòu)復審代碼時可以重構(gòu)。 為何重構(gòu) 重構(gòu)不是銀彈,但是幫助你達到以下幾個目的 改進軟件設(shè)計 不良的程序需要更多的代碼。而代碼越多,正確的修改就越困難。改進代碼設(shè)計的一個重要原則就...
摘要:續(xù)前文后端好書閱讀與推薦,幾十天過去了,又看了兩本好書還有以前看過的書,這里依然把它們總結(jié)歸納一下,加入一些自己的看法有用的鏈接和可能的延伸閱讀,并推薦給需要的同學。 續(xù)前文 后端好書閱讀與推薦 - Mageek`s Wonderland ,幾十天過去了,又看了兩本好書(還有以前看過的書),這里依然把它們總結(jié)歸納一下,加入一些自己的看法、有用的鏈接和可能的延伸閱讀,并推薦給需要的同學。...
摘要:續(xù)前文后端好書閱讀與推薦,幾十天過去了,又看了兩本好書還有以前看過的書,這里依然把它們總結(jié)歸納一下,加入一些自己的看法有用的鏈接和可能的延伸閱讀,并推薦給需要的同學。 續(xù)前文 后端好書閱讀與推薦 - Mageek`s Wonderland ,幾十天過去了,又看了兩本好書(還有以前看過的書),這里依然把它們總結(jié)歸納一下,加入一些自己的看法、有用的鏈接和可能的延伸閱讀,并推薦給需要的同學。...
閱讀 1319·2021-11-19 09:40
閱讀 1022·2021-11-12 10:36
閱讀 1335·2021-09-22 16:04
閱讀 3188·2021-09-09 11:39
閱讀 1324·2019-08-30 10:51
閱讀 1944·2019-08-30 10:48
閱讀 1287·2019-08-29 16:30
閱讀 533·2019-08-29 12:37