成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

重構(gòu)代碼的7個銷魂階段

開發(fā) 前端
面對這種情況,真正的程序員會是不會認(rèn)輸?shù)模麄儠邮芴魬?zhàn)認(rèn)真分析,那怕重寫也在所不惜。最終那個模塊會被他們重構(gòu),就像以前和大家介紹過的那些令人銷魂的編程方式中的屠宰式編程一樣。下面是重構(gòu)代碼的幾個階段

你曾去想重構(gòu)一個很老的模塊,但是你只看了一眼你就惡心極了。文檔,奇怪的函數(shù)和類的命名,等等,整個模塊就像一個帶著腳鐐的衣衫襤褸的人,雖然能走,但是其已經(jīng)讓人感到很不舒服。面對這種情況,真正的程序員會是不會認(rèn)輸?shù)模麄儠邮芴魬?zhàn)認(rèn)真分析,那怕重寫也在所不惜。最終那個模塊會被他們重構(gòu),就像以前和大家介紹過的那些令人銷魂的編程方式中的屠宰式編程一樣。下面是重構(gòu)代碼的幾個階段,文章來自:The 7 stages of refactoring,下面的翻譯只是意譯。

***階段 - 絕望

在你開始去查看你想要重構(gòu)的模塊的,你會覺得好像很簡單,這里需要改一個類,那里需要改兩到三個函數(shù),重寫幾個函數(shù),看上去沒什么大不了的,一兩天就搞定了。于是你著手開始重構(gòu),然后當(dāng)你調(diào)整重構(gòu)了一些代碼,比如改了一些命名,修理了一些邏輯,漸漸地,你會發(fā)現(xiàn)這個怪物原來體型這么大,你會看到與代碼不符甚至含糊不清的注釋,完全摸不著頭腦的數(shù)據(jù)結(jié)構(gòu),還有一些看似不需要方法被調(diào)了幾次,你還會發(fā)現(xiàn)無法搞清一個函數(shù)調(diào)用鏈上的邏輯。你感到這個事可能一周都搞不定,你開始絕望了。

第二階段 – 找最簡單的做

你承認(rèn)你要重構(gòu)的這個模塊就是一個可怕的怪物,不是一兩下就可以搞定的,于是你開始著干一些簡單的事,比如重新命名一下幾個函數(shù),移除一些代碼的阻礙,產(chǎn)生幾個常量來消除magic number,等等,你知道這樣做至少不會讓代碼變得更糟糕。

第三階段 – 再次絕望

但是接下來的事會讓你再次撞墻。你會發(fā)現(xiàn)那些代碼的瑕疵是些不痛不癢的事,改正這些事完全于事無補,你應(yīng)該要做的事就是重寫所有的東西。但是你卻沒有時間這么干,而這些代碼剪不亂理還亂,耦合得太多,讓你再一次絕望。所以,你只能部分重寫那些不會花太多時間的部分,這樣至少可以讓這些老的代碼能被更多的重用。雖然不***,但是至少可以試試。

第四階段 – 開始樂觀

在你重構(gòu)這個模塊幾天之后,不斷的重構(gòu)了幾次,雖然你發(fā)現(xiàn)改善代碼的進度太慢了,但此時,你已知道代碼應(yīng)該要被改成什么樣,你在痛苦之后也鎖定了那些那修改的類。是的,雖然你的時間預(yù)算已經(jīng)超支,雖然要干的事比較多,但你還是充滿希望,覺得那是值得的。

第五階段 - 快速了結(jié)

這個時候,你知道你花了太多的時間,你感到你所面對的情況越來越讓你越到不安,你明白你自己已經(jīng)陷入了困境。你原本以為只需要一次簡單的重構(gòu),然而現(xiàn)在你要面對的是重寫所有的東西。你開始意識到原因是因為你是一個***主義者,你想讓代碼變得***。于是你開始在怠慢你文檔,并到到一個捷徑來重寫老的代碼,你開始采用一些簡單而粗暴,快速而有點骯臟的方法。雖然不是很***,但你就是這樣去做了。然后,你開始運行測試做UT,發(fā)現(xiàn)UT報告上全是紅色,幾乎全都失敗了,你恐慌了,于是快速地fix代碼,然后讓UT 能工作。此時,你拍拍自己胸口,說到,沒問題 ,于是就反代碼提交了。

第六階段 – 修改大量的Bug

你的重寫并不***,雖然其過了測試,但是那些測試對于你的新的代碼有點不太合適,雖然他們都沒有報錯,但是他們測試得范圍太小了,沒有覆蓋到所有的情況和邊界。所以,在這以后,你還需要幾周的時間不得不來修改越來越多的bug,這使得你的設(shè)計在每一次quick-fix后就變得越來越難看。此時,代碼已經(jīng)不像你所期望的那樣***了,但你依然覺得他還是比一開始要好一些。這個階段可能歷經(jīng)幾個月。

第七階段 - 覺悟

經(jīng)過了6個月,你重寫的模塊又出了一個比較嚴(yán)重的bug。這讓你重構(gòu)的那個模塊變得更難堪。你發(fā)現(xiàn)出的這個問題是和當(dāng)初的設(shè)計不一致,你還發(fā)現(xiàn)被你重構(gòu)掉的那段老的代碼并不是當(dāng)初看上去的那么壞,那段老的代碼確實考慮到了一些你未曾考慮到的事情。這個時候,你團隊里有人站出來說這個模塊應(yīng)該被重構(gòu)或是重寫,而你卻不動聲色地一言不發(fā),并希望那個站出來的人能在幾個月后能覺悟起來。

不知道這是不是你的經(jīng)歷,我經(jīng)歷過很多次這樣的事。對于很多維護性質(zhì)的項目,我?guī)缀醪桓覄樱桥驴吹酱a很不合口味。那些從來沒有寫過代碼的敏捷咨詢師一定會說用TDD或是UT可以讓你的重構(gòu)更有效也更容易,但我想告訴你,這種脫離實際的說法很不負(fù)責(zé)任,這就好比說—— 我在殺豬的時候遇到了一些麻煩,因為我對豬的生理結(jié)構(gòu)不清楚,或是這本來就是一頭畸形的豬,導(dǎo)致我殺的豬很難看,而偉大的敏捷咨詢師卻告訴我,要用一把更快更漂亮的刀。軟件開發(fā)永遠不是那么簡單的事,殺豬也一樣。

原文:http://coolshell.cn/articles/5201.html

【編輯推薦】

  1. 淺談項目管理中該如何review與重構(gòu)
  2. JavaScript重構(gòu) 模塊劃分和命名空間
  3. JavaScript重構(gòu)深入剖析
  4. 繼續(xù)領(lǐng)悟函數(shù)式:Scala指令式風(fēng)格代碼的重構(gòu)
  5. 重構(gòu)Struts2 JSP分頁
責(zé)任編輯:陳貽新 來源: 酷殼
相關(guān)推薦

2011-10-25 18:35:47

Qcon支付寶程立

2024-08-06 12:35:42

C#代碼重構(gòu)

2021-08-03 08:13:48

重構(gòu)API代碼

2024-05-21 12:18:57

Python代碼重構(gòu)

2021-05-26 08:50:37

JavaScript代碼重構(gòu)函數(shù)

2013-05-15 12:07:00

2023-06-26 08:06:39

重構(gòu)代碼冗余

2024-09-05 10:17:34

2014-02-04 19:48:07

重構(gòu)代碼質(zhì)量

2019-11-05 08:34:33

代碼switch開發(fā)

2020-12-09 10:49:33

代碼開發(fā)GitHub

2013-05-14 10:31:22

程序員程序員轉(zhuǎn)型

2012-07-27 10:30:12

重構(gòu)

2019-02-18 16:21:47

華為代碼重構(gòu)

2009-12-29 10:43:31

PPPOE協(xié)議

2023-09-26 12:04:15

重構(gòu)技巧Pythonic

2023-01-11 11:35:40

重構(gòu)PythonPythonic

2023-02-06 12:00:00

重構(gòu)PythonPythonic

2021-05-23 15:23:55

代碼開發(fā)工具

2022-12-26 00:02:24

重構(gòu)代碼軟件
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 在线免费观看日本 | 欧美1区 | 亚洲福利| 久久久久久国产精品 | 性福视频在线观看 | 欧美一级在线 | 黄色骚片| 国产高清91| 91精品国产欧美一区二区 | 亚洲综合日韩精品欧美综合区 | 中文字幕国产视频 | 国产精品污www一区二区三区 | 亚洲欧美中文日韩在线v日本 | 日韩成人在线免费观看 | 成年人在线视频 | 天天躁人人躁人人躁狂躁 | 国产目拍亚洲精品99久久精品 | 国产第一亚洲 | 亚洲国产激情 | 99精品国自产在线 | 日韩成人精品在线观看 | 96久久久久久 | 日韩资源 | 人人cao| 中文字幕电影在线观看 | 我要看黄色录像一级片 | 91就要激情| 能看的av | 欧美久久久久久久久 | 国产98色在线 | 日韩 | 特级做a爱片免费69 精品国产鲁一鲁一区二区张丽 | 中文字幕免费观看 | 中文字幕视频在线观看免费 | 亚洲自拍一区在线观看 | 国产a区 | 成人激情视频免费在线观看 | av资源网站 | 四虎首页| 国产成人精品久久 | 久久精品国产99国产精品 | 亚洲欧美自拍偷拍视频 |