色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

在代碼重構(gòu)中蛻變

  這幾天,要對(duì)我半年前寫的代碼進(jìn)行一些整理工作,在看代碼時(shí)發(fā)現(xiàn)當(dāng)時(shí)有很多地方寫得不夠好,俗稱的有“壞味道”,呵呵,重構(gòu),必須的。

  幾年前通讀過(guò)《重構(gòu),改善既有代碼的設(shè)計(jì)》一書,雖然對(duì)各種重構(gòu)模式或方法記憶有限,但精髓還是記住了:改代碼而不改變軟件的外在表現(xiàn),循序漸進(jìn)。

  其實(shí),重構(gòu)是一個(gè)開發(fā)人員的基本工作內(nèi)容,是在每天的開發(fā)過(guò)程中都要用到的。離開了重構(gòu)和測(cè)試,代碼質(zhì)量是難有保障的。有人會(huì)說(shuō)沒(méi)有用到重構(gòu),其實(shí)最簡(jiǎn)單的例子,當(dāng)你發(fā)現(xiàn)一個(gè)類中有幾處用到了相同的代碼,你把這幾行代碼提取到了一個(gè)私有函數(shù)中以供復(fù)用,這就是一次重構(gòu)。所以說(shuō),別跟人炫耀你會(huì)重構(gòu),這是基本功。

  好久沒(méi)更新博客了,借此說(shuō)說(shuō)我的一點(diǎn)心得吧。

  1.目的明確。代碼是一種平衡的產(chǎn)物,很多地方都在保持著某種平衡,有功能與性能的平衡,有可靠性與可維護(hù)性的平衡等等,每一次動(dòng)手,都要有一個(gè)目標(biāo),是想改進(jìn)局部代碼,還是想改進(jìn)類結(jié)構(gòu),只有針對(duì)不同的目的才能實(shí)施不同的方法。

  2.評(píng)估影響。改動(dòng)前,最好能有個(gè)預(yù)估,對(duì)可能產(chǎn)生的影響做到心中有數(shù),以免引起不必要的后果。在“壞味道”的代碼中是很有可能牽一發(fā)而動(dòng)全身的,要注意安全。如果只是對(duì)類的私有成員的改動(dòng),那通常影響的范圍有限,如果涉及到對(duì)公有成員或保護(hù)成員的改動(dòng),那就要注意了,簡(jiǎn)單的評(píng)估方式是充分利用IDE的搜索、引用等功能,把引用過(guò)此成員的代碼行全部找出來(lái),看看影響的范圍有多廣,如果有些代碼不在你的控制之內(nèi),那就要慎重考慮這個(gè)重構(gòu)了。

  3.慎改結(jié)構(gòu)。設(shè)計(jì)人員或架構(gòu)師在定義類結(jié)構(gòu)的時(shí)候一定有他的綜合考慮,在沒(méi)有充分理解之前,請(qǐng)慎重吧。不要拿設(shè)計(jì)模式去套現(xiàn)有的結(jié)構(gòu),設(shè)計(jì)模式是個(gè)指導(dǎo),如果學(xué)完設(shè)計(jì)模式還在硬用來(lái)套用,那這種僵化的思維還不如不學(xué)的好。所以,當(dāng)想要做這樣的重構(gòu)時(shí),請(qǐng)與你的設(shè)計(jì)師、架構(gòu)師或有經(jīng)驗(yàn)的同事協(xié)作,除非你自己就是設(shè)計(jì)師。

  4.小步伐前進(jìn)。每次改動(dòng)盡量小,這樣可以把影響限制到小范圍。就像一個(gè)公式一樣,如果同時(shí)改變其中的幾個(gè)變量,那很難說(shuō)是哪一個(gè)影響了結(jié)果,但如果一次只改變其中的一個(gè),就可以確認(rèn)其對(duì)結(jié)果的影響。尤其是當(dāng)代碼已經(jīng)完成了用戶需求,這時(shí)的重構(gòu)只是為了讓代碼更好,切忌不要影響到已經(jīng)得到用戶確認(rèn)的外在表現(xiàn)。

  5.測(cè)試。無(wú)論你的開發(fā)是否是測(cè)試驅(qū)動(dòng),在重構(gòu)時(shí)測(cè)試是保證代碼正確的必要手段。修改-編譯-測(cè)試,重復(fù)這個(gè)過(guò)程,直到達(dá)到目的。

  當(dāng)你花了幾分鐘或者幾個(gè)禮拜,已經(jīng)讓代碼大為清爽的時(shí)候,回過(guò)頭來(lái)對(duì)比曾經(jīng)的“壞味道”,我想,你會(huì)喜歡上代碼的,重構(gòu)會(huì)發(fā)生在你寫下一行代碼的時(shí)刻,變成了編碼能力了。

  少一行代碼,就少一分出錯(cuò)的可能,別心疼你刪除掉的代碼,雖然那是你的心血,但那已經(jīng)是歷史,在重構(gòu)代碼中蛻變已經(jīng)完成。

it知識(shí)庫(kù)在代碼重構(gòu)中蛻變,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 平顶山市| 保德县| 巩留县| 永平县| 含山县| 丁青县| 阳春市| 和龙市| 唐海县| 东丽区| 郯城县| 扶绥县| 托里县| 金山区| 拜城县| 双鸭山市| 丘北县| 巍山| 团风县| 石渠县| 久治县| 凌海市| 井陉县| 莱西市| 乌审旗| 霍山县| 彩票| 乌海市| 勃利县| 沿河| 大关县| 晋宁县| 和顺县| 康保县| 越西县| 石楼县| 奉化市| 平湖市| 花垣县| 泗水县| 高陵县|