編程經(jīng)驗:重構代碼的7個階段
第一階段 - 絕望當你開始查看要重構的模塊時,你可能會覺得很簡單。只需修改幾個類、函數(shù),調(diào)整一些邏輯就可以了,看上去似乎沒什么大不了的問題,一兩天就能解決。但是當你開始著手重構后,你會發(fā)現(xiàn)這個模塊的問
第一階段 - 絕望
當你開始查看要重構的模塊時,你可能會覺得很簡單。只需修改幾個類、函數(shù),調(diào)整一些邏輯就可以了,看上去似乎沒什么大不了的問題,一兩天就能解決。但是當你開始著手重構后,你會發(fā)現(xiàn)這個模塊的問題比想象中的更復雜。你會遇到難以理解的文檔、奇怪的命名方式,以及與代碼不符的注釋等。你會感到絕望,意識到這個任務可能需要一周甚至更長時間才能完成。
第二階段 - 找最簡單的做
面對絕望,你可能會開始尋找一些簡單的解決方案。例如,重新命名幾個函數(shù)、移除代碼的障礙,添加常量來消除魔法數(shù)字等。盡管這樣做并不能完全解決問題,但至少不會讓代碼變得更糟糕。
第三階段 - 再次絕望
然而,接下來的情況可能讓你再次陷入困境。你會發(fā)現(xiàn)這些代碼中的問題無關緊要,修復它們對整體沒有太大幫助。你意識到需要重寫所有的東西,但是時間不允許。于是,你只能部分重寫一些不會花費太多時間的部分,以便更多地重用老代碼。雖然不完美,但至少可以一試。
第四階段 - 開始樂觀
在嘗試部分重構幾天后,你可能會發(fā)現(xiàn)進展緩慢,但至少你知道應該將代碼改成什么樣子了。你鎖定了需要修改的類,并且充滿希望,覺得這一切都是值得的。你內(nèi)心重新燃起了斗志。
第五階段 - 快速了結
然而,在此時,你可能會發(fā)現(xiàn)已經(jīng)花費了太多的時間,情況變得越來越復雜,讓你感到不安。你開始怠慢文檔,試圖找到一個捷徑來重寫舊代碼,采用了一些簡單、粗暴、快速、有點骯臟的方法。盡管并不完美,但你只能這樣去做。接著,你運行測試并發(fā)現(xiàn)測試報告上幾乎全部是紅色,幾乎所有的測試都失敗了。你恐慌了,迅速修復代碼使其通過測試。你拍拍胸口,告訴自己沒問題,然后提交代碼。
第六階段 - 修改大量的Bug
你的重寫雖然通過了測試,但與新代碼不太匹配的一些單元測試并不能很好地覆蓋所有情況和邊界。因此,在之后的幾周甚至更長時間里,你不得不修復越來越多的bug,這導致你的設計和代碼變得越來越難看。盡管代碼不像最初那么完美,但你依然覺得比起一開始要好一些。這個階段可能歷經(jīng)數(shù)月。
第七階段 - 覺悟
在經(jīng)過6個月的時間后,你的重構模塊出現(xiàn)了一個嚴重的bug。這讓你覺得重構的模塊變得更加糟糕。你發(fā)現(xiàn)問題是因為當初的設計與現(xiàn)實不符,并且意識到被重構掉的那段舊代碼其實并沒有想象中那么糟糕,它考慮到了一些你沒有注意到的事情。此時,團隊中有人提出重構或重寫這個模塊,但你選擇保持沉默,希望他們能在幾個月后自己覺醒。