歡迎您光臨本站 註冊首頁

重構時應避免過度思考

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  

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

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

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

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

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

話雖如此,做到並不容易……

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

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

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

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

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

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

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

查看英文原文:Stop Thinking During Refactoring



[火星人 ] 重構時應避免過度思考已經有358次圍觀

http://coctec.com/docs/program/show-post-71390.html