重構 重新架構 再設計與重寫的區別

2021-06-25 15:32:13 字數 983 閱讀 6231

被 martin fowler 定義的重構,是乙個非常具體的術語,以數學上等同的具體術語為基礎【注2】。重構是關於小的、「行為保留」的增加的、安全步驟。重構不是在應用程式裡回頭去「填充空白」的藉口。

讓我們給出一些具體的例子來說明什麼不是重構,下面的行為都不被視作重構:

注意,我說的這些可以是重構的行為。決定它們是否屬於重構的大部分因素在於你是如何去做的。重申:重構行為,是小而安全的步驟,最好是可逆的步驟。如果你不得不考慮它是否可以執行,那麼它就不再是重構行為了。

那麼如何區別重構與重新架構或再設計呢?重構是在鍵盤上完成的,接觸真正的**。而重新架構,最好是在白板上(或最近的酒吧)完成的。重新架構涉及了較大的願景,考慮下一周/月/年的規劃。重構是你用來幫助自己達成目標的技巧之一。

再設計(redisigning)是乙個術語,覆蓋了任何時候你正在重新考慮的設計決定。由於敲**是設計行為,甚至到了打字階段,再設計肯定包含重構。畢竟,如果你不稍微再設計,就不太容易提高設計。然而,在通常情況,「再設計」意味著放棄老的解決方案,提出新的解決方案,或多或少地從頭開始。如果你在白板上做再設計,可能是沒問題的,與重新架構的舉動類似,你仍然可以通過重構達成目標。如果你在鍵盤上完成再設計,這就不是重構了。

重寫(re-writing)類似再設計,不過它只是在鍵盤上完成。重寫通常是受到了頭痛的傷害,但是它常常讓你丟掉惰性而到達乙個更好的地方。類似拍賣和搬到了印度班加羅爾。

在實戰中,會遇到混合的情況。重構應該是乙個開發人員使用的日常程序的一部分,當你這樣看的時候,界線會變得模糊。比如:

如果你最初開發了兩個部件,後來才注意到公用的情況,該怎麼辦?好的,這是重構行為,可能要集中在以多型取代條件式的重構上。但是從外部看,這可能看起來非常像重寫;必定(相對地)大量**要消除掉。但是,不管你用什麼方式削減,寫第二個部件就不是乙個重構行為。

重構更傾向於保持**簡單、靈活,而不是做對事情。做對事情經常涉及到新增新**,或再設計應用程式的大塊功能。使其靈活只是為了使其更加容易。這樣說的話,重構最好被看做是一項賦能(enabling)行為。

覆蓋 重寫 ,重構,過載的區別

1 重構 重構,是對軟計設計方法的描述,這個層面是架構和設計方法,例如有乙個文件一開始叫做 names.txt,過幾天你發現這個文件的名字怎麼看怎麼不順眼,就是想改名字,這可以叫做是重構。重構是乙個軟體維護的通用技巧,重構的具體做法,可以通過重寫或者過載等,但不限於此,更改注釋,更改函式名類名等,都...

方法過載,重構,覆蓋,重寫的區別

方法過載還是比較好理解的,就是在類的內部,定義多個方法,這些方法的方法名字相同,引數型別和引數個數不同,注意,返回值型別並不能區分過載 看 public void show int a,double b public void show double c public intshow double ...

重寫與過載的區別

1 過載 1 是指方法名一樣,引數不同的幾個方法,它們的功能相近 2 呼叫的時候是根據呼叫 引數的型別 來識別方法。2 重寫 也是方法的覆蓋 1 是子類中修改父類中方法的方法 2 在子型別中定義,與父型別中的方法名和引數都一樣的方法 3 在呼叫是,是根據 物件的型別 來呼叫相應的方法。舉個例子 pu...