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