2009-01-17 70 views
5

在閱讀了福勒的「重構」一段時間後,我經常想到「我應該在更小的步驟中完成」。 - 即使我沒有破壞我的代碼。你小步驟重構嗎?

以小步驟重構是安全的,但花費時間。這是速度和風險之間的折衷 - 我試圖在選擇重構方式時採取策略性的策略。

儘管如此:大部分時間我都在做更大步驟的重構。如果我帶了一些福勒的「機械學」部分,並比較我的工作方式,我可能會發現我經常跳躍兩到五步。這並不意味着我是重構專家。我的代碼可能會中斷5到60分鐘或不可編譯。

您是否以較小的步驟重構並嘗試在更短的頻率上生成完整的代碼?而且:你是否成功做到這一點?

+0

這應該是一個wiki。 – 2009-01-17 20:49:42

+0

@ocdecio不明白爲什麼這應該是維基。這不是投票 – krosenvold 2009-01-17 21:04:26

回答

6

Martin Fowler似乎傾向於小而漸進的重構方法。但是,在閱讀他的書後,他偶爾會做出一些激烈的步驟,但是只有用單元測試來備份代碼。

重構是一種用於改進現有代碼庫設計的受控技術。其實質是應用一系列小的行爲保留轉換,其中每一個「太小而不值得做」。然而,每個轉換的累積效應都非常顯着。通過小步驟完成它們,可以降低引入錯誤的風險。您還可以避免在進行重組時系統崩潰 - 這可讓您在較長時間內逐漸重構系統。 - Martin Fowler

1

我傾向於在大部分時間大步重構,所以我可以從樹上看到森林。這是一種「意識流」式的編程。只要你有你的上一個工作版本安全的選擇你的源代碼控制...

0

這就是「紅色,綠色,重構」方法有用的地方。在每個階段,您都有能力驗證代碼的行爲是否保持不變,重構只需要整合新行爲。

4

我嘗試:)我必須抵制最重要的一個衝動,而重構實際上正在進行其他變化。假設我正在重構一些代碼並查看代碼中不相關的內容。我必須有意識地努力不要去「修復」這一點。記下它並繼續。首先,這是對當前任務的分心。它也最終會污染你的變更集,所以你的提交信息現在必須記錄幾個看似隨機的變化。

0

我使用的經驗法則是重構測試,只重構儘可能多的代碼,因爲您也有自信。

在60分鐘,你確定你的代碼正在做它應該做的。你需要很多測試才能通過。我只想嘗試一下,然後繼續下一步。

0

如果我對自己想要做的事情有清晰的瞭解,並且如果我可以輕鬆確認事後我沒有發現任何問題,我正在採取更大步驟。

如果重構更復雜,我會嘗試將其分解成更小的步驟,並在每個重試之後進行嚴重測試。

3

是的,總是。我認爲重構的真正本質是選擇從哪一步開始。

我發現,以安全的方式重構大的變化的東西總是要有一個合理清晰的圖像,你想要去哪裏。然後考慮你現有的系統,並試圖找出你可以引入哪些最不可能是激進變化的作品。然後,您可以以受控和經過嚴格測試的方式介紹這些內容。

所以你要做的就是在工作的惡劣。並不總是直接從前面攻擊,但有時只是鑿掉小塊。通常我會等待,並且在經過幾次小小的混亂之後纔去爭取「大獎」。但我知道其中我想去。

以這種方式工作的好處是您可以保持進步。你永遠不會「停止開發來重構」。可以說有些情況下,停止是正確的情況,但大多數情況下並非如此。

這裏的想法是,如果你在獎金兌現時「開始」,你將花費接下來的X天來做苦差事。而且存在風險,也許你會出門或者不工作 - 或者花費6個月而不是一個星期。如果你先做苦工,那麼兌現獎品的風險就會降低。你的代碼會隨着你的進步而改善。有時你可以決定做一半的工作就夠了,因爲你對問題的理解會增加。有時候你想要去哪裏的想法有些拙劣,你可以在你進步的時候重新調整你的目標。

但其誘人的直接獎勵。

0

我通常會在更改代碼時重構代碼。也就是說,我不是在維護其功能的同時重寫代碼並重寫它,而是將其重寫爲新功能,並在此過程中改進代碼的設計。

通常這意味着在我沒有對舊代碼進行完整和令人滿意的重構之後,我實現了該功能。雖然它有所改進,但我知道在下一次我要改變它的功能時,我會有時間進一步改進它。

對於測試,這意味着我可以同時測試重構和新功能,這應該可以節省一些時間。

這也意味着我只花費足夠的時間進行重構,以改善該特定功能所需的維護情況。這應該有助於避免過度工程和/或浪費時間重構已經工作的東西,並且不會從更好的設計中受益。通過只關注代碼,無論如何我都會改變,我很有可能會在近期再次訪問這些代碼,以便在用戶注意力範圍內做進一步的修改。

0

小不連續的步驟是什麼,我最舒服的,雖然在某些點上也可以是我的自我控制,這可能是一個重構血浴統治的考驗。如果我注意到可以做出任何改進(無論大小如何),我會記下它們並考慮如何將它分解成單獨的重構任務。另外,在提交消息中有一個改變的傳奇並沒有幫助。

注意:我所使用的代碼基礎相當古老,充滿了以科學家命名的那些神祕錯誤。即使有50%的測試覆蓋率,大部分仍然缺少任何東西,這會讓人不知所措。

0

沒錯。我喜歡不斷地進行測試,因此一連串的小型重構工作得很好。我的代碼一次破解超過了幾分鐘,我感到非常不舒服,而且如果我晚上回家時我的代碼被破壞,第二天早上重新寫入,我總是會回覆它總是比嘗試提取更好我曾是。