重構時應避免過度思考

fmms 12年前發布 | 7K 次閱讀 重構

重構是一門在不改變軟件外部行為情況下,改善既有代碼內部結構的一門技術。從表面來看,重構需要引入大量的思考行為,然而,過度地思考同樣會產生不利的影響。

Kent Beck 提到,重構中面臨最大的挑戰就是如何做到循序漸進,循序漸進指的是如何將工作分解為可控的步驟,并且每個步驟都易于管理。重構步伐過快會導致不穩定代碼的出現。此外,想得越多,越是謹慎反而會嚴重減慢重構的步伐。

正如許多與我結對編程的伙伴都會告訴你的那樣,我有一個非常不招人喜歡的習慣:在重構時總會說“不要再想啦”。我知道這并不是我真正要說的,因為我不可能去故意表達這個意思,但是直到現在,我才有機會可以給出一個更好的解釋。

Kent 解釋了“水平和垂直重構”的概念。垂直重構是指調整方法或代碼塊在調用堆棧中的上下順序,然而水平重構則指的是在類似于同級別的對象間所做的調整。依 Kent 所述,重構時應避免同時做上述兩種調整。

當需要重構具有多重調用或是多重實現的對象時,就要額外小心,并且重新回到垂直和水平方法,將這兩者操作分開進行,并且要時刻注意代碼重構的深度。

話雖如此,做到并不容易??

比較好的一個辦法就是使用索引卡(Index Cards):

在電腦旁放置索引卡會幫助我保持專注。當我在處理水平重構時突然意識到還可以做垂直重構時,我會迅速記在索引卡上,然后馬上回到剛才正在進行的工作中。這種方法不僅可以使我在進行下一步工作前,有效地先將手頭的工作結束,同時,又不會導致某些好點子被遺忘。方法之好用,整個過程感覺就像是在做冥想,技能感受到自己的呼吸,又不會被完全自我的意識所牽絆。

J. B. Rainsberger 同意這種觀點并同時指出:

無論你在做什么,想要專注時,手邊準備一張卡片和一支筆。當有奇思妙想突然在腦海中閃現,而這些事情又不需要立刻處理時,就可以用 5 個或更少的字將它寫下來,然后繼續回到剛才所作的事情中。效果甚是神奇。

這與 Joshua Kerievsky 所提倡的 Narrow Changem 模式非常相似。每次只專注于一小部分的變化點,然后再繼續在后續的重構中應用 Narrow Change 或是 Parallel Change 原則。

盡管重構中需要思考,但是,保持專注并避免潛在的干擾對良好的重構行為是很有必要的。Kent 說道:

我的同伴經常會在重構的過程中產生一些好的想法,比如如何將一些函數挪到B中。這時我就會告訴他停止思考。我真實的目的并不是不想讓他去思考,我只想讓他專注的把手頭的事情先做完。就像我們往墻上釘釘子,釘子才剛釘進去了一半,我們沒有理由放下手里的活去釘另外一個。

查看英文原文:Stop Thinking During Refactoring

譯者:賈國清

來自: InfoQ
 本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!