重構時應避免過度思考

2021-09-16 18:19:40 字數 1595 閱讀 2807

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

\u0026#xd;\n

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

\u0026#xd;\n

\u0026#xd;\n
\u0026#xd;\n

kent解釋了「水平和垂直重構」的概念。垂直重構是指調整方法或**塊在呼叫堆疊中的上下順序,然而水平重構則指的是在類似於同級別的物件間所做的調整。依kent所述,重構時應避免同時做上述兩種調整。

\u0026#xd;\n

\u0026#xd;\n

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

\u0026#xd;\n

\u0026#xd;\n

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

\u0026#xd;\n

比較好的乙個辦法就是使用索引卡(index cards):

\u0026#xd;\n

\u0026#xd;\n

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

\u0026#xd;\n

\u0026#xd;\n

j. b. rainsberger同意這種觀點並同時指出:

\u0026#xd;\n

\u0026#xd;\n

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

\u0026#xd;\n

\u0026#xd;\n

這與joshua kerievsky所提倡的narrow changem模式非常相似。每次只專注於一小部分的變化點,然後再繼續在後續的重構中應用narrow change或是parallel change原則。

\u0026#xd;\n

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

\u0026#xd;\n

\u0026#xd;\n

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

\u0026#xd;\n

\u0026#xd;\n

檢視英文原文:stop thinking during refactoring

重構時避免方向性錯誤

在重構時,經常會抽取元件,然後復用元件。但是如果復用元件的地方,結構已然混亂,那麼直接復用元件,產生錯誤的可能性是很大的,這時採用復用元件的這種重構方法,其方向就是錯誤的。因為 的根基是比較混亂的,所以一旦產生錯誤,修復錯誤的成本會很高。所以首先應回退版本,保持對系統和結構的可控。如果已經抽取了元件...

應避免absolute布局濫用

absolute定位會導致當前塊對父級高度和寬度的 塌陷 因為父級元素不知道absolute子元素的寬高 所以這個元素無法支撐起父元素。而且absolute定位存在相容性的重災區 1.absolute定位在ie,7有相容性問題,需要觸發haslayout 2.觸發完haslayout的快遞在ie7下...

重構 顯示資料 DataGridView的應用

1.基本的屬性 定位 currentcell 當前單元格 currentcell的響應的屬性 value值 columnindex 當前單元格的列 rowindex 當前單元格的行 指定單元格 datagridview i,j 行數datagridview.rowcount 對單元格的形狀進行編輯 ...