『重构--改善既有代码的设计』读书笔记----序
??? 作為C++的程序員,我從大學(xué)就開(kāi)始不間斷的看書(shū),看到如今上班,也始終堅(jiān)持每天多多少少閱讀技術(shù)文章,書(shū)看的很多,但很難有一本書(shū),能讓我去反復(fù)的翻閱。但唯獨(dú)『重構(gòu)--改善既有代碼的設(shè)計(jì)』這本書(shū)讓我重復(fù)看了不下3遍,今天我重新拿起這本書(shū)開(kāi)始了第四遍的閱讀。
??? 我后來(lái)仔細(xì)想了想為什么我會(huì)對(duì)這個(gè)書(shū)如此“迷戀”?忽然之間,我意識(shí)到這本書(shū)真正意義上給我?guī)?lái)了工作的改變。不像別的技術(shù)書(shū)籍,可能你看過(guò)之后,你腦子里有個(gè)印象,但對(duì)于實(shí)踐這塊不能立馬就做,所以往往印象不深。而這本重構(gòu),在你看完之后,你可以立馬開(kāi)刀闊斧去進(jìn)行真正意義上的實(shí)踐,而且收獲頗多,樂(lè)此不疲。
??? 接下來(lái)的日子,我將進(jìn)行第四次『重構(gòu)--改善既有代碼的設(shè)計(jì)』的閱讀,對(duì)于這本書(shū),我也有了不一樣的感情在里面。以前對(duì)于看書(shū),沒(méi)有寫(xiě)讀書(shū)筆記的習(xí)慣,希望在這本書(shū)給我?guī)?lái)各種便利的同時(shí),我也能夠?yàn)樗白鳇c(diǎn)什么”。呵呵,其實(shí)也是給自己加深印象的一種途徑。因?yàn)椤爸貥?gòu)”我感覺(jué)目前國(guó)內(nèi)開(kāi)發(fā)者還不是特別熟悉,甚至有些程序員寫(xiě)了幾年代碼之后都不知道設(shè)計(jì)模式是什么東西。遇到項(xiàng)目,遇到代碼,往往是想到什么就寫(xiě)什么。當(dāng)遇到代碼修改或者增加功能的時(shí)候,不會(huì)去看擴(kuò)展性或者兼容性,直接語(yǔ)句一貼就完事。對(duì)于這種程序員,我真的希望你可以好好的靜下心來(lái)想想,這些年來(lái)你代碼能力有沒(méi)有實(shí)質(zhì)上的長(zhǎng)進(jìn)。
??? 擁有“代碼潔癖”其實(shí)是一種很難能可貴的事情,有時(shí)候看到一團(tuán)糟糕代碼,心里會(huì)去想對(duì)他進(jìn)行重構(gòu)。不要懷疑這樣會(huì)不會(huì)耽誤自己的效率,重構(gòu)之后添加功能往往能夠更加如魚(yú)得水。
??? 今天寫(xiě)的是序,為了便于有文有料,還是總結(jié)幾個(gè)可以直接上手的要點(diǎn)給大家,之后我的出法應(yīng)該就是針對(duì)重構(gòu)列表中的每一條,都出一篇對(duì)應(yīng)的文章。只有這樣,我才能真正意義上的去重視那些簡(jiǎn)單的,和坦然接受那些復(fù)雜的重構(gòu)手法。下面先列舉幾個(gè)比較有效的重構(gòu)原則。作為序篇的總結(jié)。
??? 1. 有時(shí)候遇到大長(zhǎng)段函數(shù),需要進(jìn)行Extract Method的時(shí)候,往往找不到一個(gè)比較好的切入點(diǎn)。其實(shí)這里有一個(gè)小竅門(mén),就是尋找邏輯泥團(tuán),那么什么是邏輯泥團(tuán)?其實(shí)很簡(jiǎn)單,就是那種有switch,if...else,for,while等循環(huán)判斷的邏輯結(jié)構(gòu)。往往提煉這種到單獨(dú)的函數(shù)可以更加有效。
??? 2. 對(duì)于函數(shù)自身來(lái)說(shuō),函數(shù)內(nèi)部的參數(shù)命名其實(shí)也很重要。有些同學(xué)可能會(huì)覺(jué)得接口的命名似乎比內(nèi)部實(shí)現(xiàn)的參數(shù)命名更加重要,但你要知道,這個(gè)函數(shù)很可能之后還是由你去修改去增加功能。如果沒(méi)有一個(gè)好的參數(shù)命名習(xí)慣,你又要重新開(kāi)始去思考,這個(gè)變量是用來(lái)干什么的,這個(gè)時(shí)間就浪費(fèi)掉了。
??? 3.? 如果函數(shù)中使用的參數(shù)都不是該類所持有,應(yīng)該考慮是否要Move Method到別的類去。對(duì)于類中函數(shù),如果有函數(shù)內(nèi)部使用的變量跟本類沒(méi)有任何關(guān)系,那么說(shuō)白了,這個(gè)函數(shù)不屬于這個(gè)類。那么就將這個(gè)函數(shù)移到他需要的參數(shù)所在的類中去。別以為這個(gè)小動(dòng)作沒(méi)什么改變,這其實(shí)已經(jīng)改變了類與類之間的耦合關(guān)系。從之前的實(shí)現(xiàn)耦合到現(xiàn)在的接口耦合,耦合度直接下降了一個(gè)級(jí)別,這是有目共睹的。
??? 4. 對(duì)于一些臨時(shí)變量,如果可以通過(guò)函數(shù)獲得,那么你就Replace Temp with Query,用函數(shù)將他替換,不要擔(dān)心性能效率問(wèn)題,記住28原則,80%的效率問(wèn)題僅僅掌握在20%的代碼身上。
??? 5. 針對(duì)變化,轉(zhuǎn)移函數(shù)。如果一個(gè)函數(shù)中需要同時(shí)用到兩個(gè)類以上的變量,那么你需要去觀察,這個(gè)函數(shù)中這些類中變量,在將來(lái)比較容易變化的是哪些。優(yōu)先將這個(gè)函數(shù)放到變化類中去。這樣對(duì)于類型碼這種,你當(dāng)然可以利用面向?qū)ο蟮姆▽?-多態(tài)來(lái)取代switch語(yǔ)句了。這里還有個(gè)小技巧,如果你覺(jué)得如果在類的生命周期中可能會(huì)改變類型,那你就別對(duì)這個(gè)類做繼承,你所要做的就是加個(gè)間接層,State/Strategy模式。通過(guò)委托來(lái)進(jìn)行生命期的行為改變,還記得David Wheeler的名言嗎?----計(jì)算機(jī)科學(xué)中的大多數(shù)問(wèn)題都可以通過(guò)增加一層間接性來(lái)解決。
??? 結(jié)語(yǔ): 其實(shí)個(gè)人很喜歡測(cè)評(píng)界的ZEALER,因?yàn)樗麄兊木窬褪窍氲绞裁淳腿プ?#xff0c;與其思來(lái)想去要不要真正來(lái)篇讀書(shū)筆記,不如狠下心來(lái)直接來(lái)一篇 『重構(gòu)--改善既有代碼的設(shè)計(jì)』讀書(shū)筆記----序 : )
轉(zhuǎn)載于:https://www.cnblogs.com/rickyk/p/4105158.html
總結(jié)
以上是生活随笔為你收集整理的『重构--改善既有代码的设计』读书笔记----序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 第三方模块:Python3 OS 文件/
- 下一篇: 最大权闭合图hdu3996