重構?還是重寫?

2021-09-16 18:10:22 字數 1564 閱讀 1397

重構和重寫的目標,都是要通過提高的**的可讀性、結構和清晰性,從而提高系統的健壯性。清晰的**更易於維護和改善。然而,在很多情況下,敏捷團隊會難以在二者之間做出選擇。

\u0026#xd;\n

**會隨著時間的流逝變得越來越差,michael dubakov為此指出了下面的原因:

\u0026#xd;\n

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

michael 建議,雖然重構和重寫都會使**更加清晰,但是這兩種技術都會導致現有系統的混亂。重構是一種增量式的活動,因此它每次只會接觸到系統的一部分。這會在區域性造成混亂,可能還比較容易控制。而另一方面,重寫是更具有攻擊性的改變,它會導致系統中更大的混亂。由於它會造成更廣泛的影響,因此要想讓重寫的影響穩定下來,時間要比重構長得多。

\u0026#xd;\n

我們重寫舊的系統,因此混亂是家常便飯。在公開發行之後,混亂顯著增長。我們預料會出現很多新的(和舊的)缺陷和古怪的行為,因此穩定期會更長
\u0026#xd;\n

peter schuh認為團隊經常會將兩個詞彼此替換使用,從而導致更多的迷惑和混亂。團隊應該知道:和重構相比,重寫更具有風險,因此應該恰當地使用術語。據他所說:

\u0026#xd;\n

那只是語義上的。然而,在一些人受到傷害之前那只是語義上的。重寫**很有風險,並且有時會付出痛苦的努力,這麼做不一定總有光明的結尾。如果我們執行重寫,但是把它叫做重構,並且整個過程以梨形(指越到後來問題越多,需要付出的時間和成本也隨之增長)進行,那就不會有業務人員停下來考慮語義了。他們只是會在下次聽到重構這個詞的時候退縮。
\u0026#xd;\n

guido a.j. stevens 的想法很有趣,他認為問題並非出在重構和重寫之間,而是在於:或者重構,或者重寫並重構。他提出:即使當團隊決定重寫系統的時候,最終他們也會有兩個系統並行執行。舊系統需要重構,而新系統正在被重寫。這種組合變成了一項極度複雜的任務,據他所說:

\u0026#xd;\n

維護老化的**基礎,並且編寫新的系統,將會耗盡你的資源。你的團隊被分割,並導致延遲。你需要制定計畫,小心翼翼地執行轉換。同時,你所面臨的上市時間問題在你的競爭對手身上不存在,他們還會試圖挖走你的客戶。如果你能正視這種現實,並仍然想把公司前途押在重寫上,那麼你也許有機會成功。
\u0026#xd;\n

naresh jain對於遺留**有下面特別的的建議。當**難於理解,並且團隊不能確定它做什麼的時候進行重構。當很清楚知道**做什麼,但是很難理解那些**的時候就重寫。

\u0026#xd;\n

因此,重構是不斷提公升系統更好的方式。它是慢速前進的,通過小的、經常的提公升來提高質量。重寫也有其自身的優勢,然而在很多情況下它是一種有風險的選擇,並且團隊可能永遠都不確定產出物的情況。正如「joel說軟體」中所說:

\u0026#xd;\n

重要的是要記住,當你從零開始的時候,沒有絕對的理由相信你會比你第一次做得好。
\u0026#xd;\n

檢視英文原文:refactor or rewrite?

重寫 過載和重構

過載 重寫和重構在之前就學習過,但到現在仍然不能準確的說出它們到底有什麼區別,該怎麼具體的應用,看來真是書到用時方恨少,這種狀況是不是特別嚴重?真的該總結回顧了。子類可繼承父類中的方法,而不需要重新編寫相同的方法。但有時子類並不想原封不動地繼承父類的方法,而是想作一定的修改,這就需要採用方法的重寫 ...

重構,重寫(覆蓋)與過載

重構負責重新設計類的體系以便將操作和 或資料從乙個類移動到另乙個類中。3.過載 注意,定義派生類中的函式不會過載其基類中的成員。如果派生類 內層作用域 的成員與基類 外層作用域 的某個成員同名,則派生類將在其作用域內隱藏該基類成員。即使兩者的形參列表不一樣。include include inclu...

C 重構 過載 重寫

來,我們問一下自己 建構函式是幹什麼的?重構是什麼?重寫是什麼?過載是什麼?重寫和過載聯絡的是什麼?重構與過載的區別是什麼?重寫和重構又是什麼關係?它們分別怎麼用?重構是重新構什麼?重寫又是在重寫什麼?過載載的又是什麼?哈哈,撒了吧 建構函式 是一種特殊的方法。主要是用來在建立物件的時初始化物件,即...