好了,前面所有的都是很簡單的例子,現(xiàn)在開始的是大型重構(gòu)。
對于大型重構(gòu)來說,情況復(fù)雜多變,耗時也會很長,前面的簡單重構(gòu)大多是在一個小時內(nèi)可以完成,但是對于大型重構(gòu)來說可能需要幾個月,甚至數(shù)年。如果是一個運(yùn)行中的系統(tǒng),重構(gòu)起來只能每天一點(diǎn)點(diǎn)去慢慢重構(gòu)。
(恕我直言,在國內(nèi)恐怕這樣的公司也很少。所以我們要自己養(yǎng)成隨時重構(gòu)的習(xí)慣,不要挖坑給自己埋最好。沒誰能給你這么長時間重構(gòu),特別當(dāng)你是個低端程序員的時候。你得相信,你所有偷懶的舉動,都會給你以后的工作帶來麻煩。除非你明天走人了,那么你的鍋可能就給我背了,等你到了新的公司,你又發(fā)現(xiàn)你也成了一個背鍋的。)
1、梳理并分解繼承體系
修改點(diǎn):某個繼承體系同時承擔(dān)兩個責(zé)任。如果繼承體系中的某一特定層級上的所有類,其子類名稱都以相同的形容詞開始,那么這個體系很可能就是承擔(dān)著兩項不同的責(zé)任。
做法:建立兩個繼承體系,并通過委托關(guān)系讓其中一個可以調(diào)用另一個。
動機(jī):混亂的繼承體系會導(dǎo)致重復(fù)代碼。
好吧,簡單來說,你可以理解為橋接模式。
2、將過程化設(shè)計轉(zhuǎn)為對象設(shè)計
修改點(diǎn):就是出現(xiàn)了C語言式的代碼
做法:將數(shù)據(jù)記錄變?yōu)閷ο螅瑢⒋髩K的行為分成小塊,并將行為移至相關(guān)對象中。
3、將領(lǐng)域和表述/顯示分離
修改點(diǎn):某些GUI類中包含了業(yè)務(wù)邏輯
做法:將領(lǐng)域邏輯分離出來,并為它們建立獨(dú)立的領(lǐng)域類
4、提煉繼承體系
修改點(diǎn):你為某個類做了太多工作,其中一部分以大量條件表達(dá)式完成
做法:建立一個繼承體系,以一個子類表示一種特殊情況
小總結(jié):
好吧,上面四個點(diǎn)寫得很概括,但是其實(shí)包括了很多東西。
越復(fù)雜的東西反而講起來越簡單。
就像我說我們來寫個注冊系統(tǒng)吧,多簡單,但是實(shí)施起來其實(shí)也不簡單。
很多時候我們都不愿意去改別人的代碼,因為可能業(yè)務(wù)就已經(jīng)很復(fù)雜了,再加上可能他也寫得爛。
你唯一必須做的是,至少保證自己的代碼別人維護(hù)起來很輕松,與君共勉吧!
新聞熱點(diǎn)
疑難解答