摘要:重構定義重構是對軟件內部結構的調整,目的是在不改變軟件可觀察行為的前提下,提高其可理解性,降低其修改成本。重構節奏小步前進,頻繁測試。
1.重構定義:
重構是對軟件內部結構的調整,目的是在不改變軟件可觀察行為的前提下,提高其可理解性,降低其修改成本。
2.重構節奏:小步前進,頻繁測試。
3.重構意義: 1.改進軟件設計 2.使軟件更容易被理解 3.幫助找到bug 4.提高編程速度惡劣的設計會讓你的速度慢下來,你會把時間花在調試上面,無法添加新功能,修改時間越來越長,因為你必須花更多時間來理解系統,尋找重復代碼。
5.獲得更高層次的認識 4.何時重構 1.重復代碼 2.過長函數有注釋的地方一般需要重構
3.過大的類 4.過多的switch或者if elseswitch或者if else過多會導致有任何修改都需要修改switch,而且枚舉如果在多個地方使用就會涉及多個地方修改
5.重構的技巧 1.Extract Method:提煉函數 1.1.重構場景:方法過長,代碼中注釋過多
1.2.做法創建一個新函數,根據它的意圖來命名(以【做什么】而不是【怎么做】來命名)。
2.Inline Temp:內聯臨時變量 2.1.重構場景一個內聯變量被簡單的表達式賦值一次
2.2.做法取消賦值動作,直接替換為對它賦值的表達式本身
2.3.舉例double basePrice = getBasePrice(); return basePrice;
應該改為
return getBasePrice();3.Replace Temp with Query 以查詢取代臨時變量 3.1.重構場景
以臨時變量保存某一表達式結果,臨時變量的問題在于,它們是臨時性的,而且只能在所屬的函數內訪問,所以它會驅使你寫出更長的函數,只有這樣你才能訪問到那些臨時變量。如果把臨時變量替換為一個查詢,那么同一個類中的所有函數都可以訪問這個臨時變量。
3.2.做法將臨時變量使替換為新函數引用
3.3.舉例重構前
public class Base { private int quantity; private int itemPrice; public double getTotalPrice() { double basePrice = quantity * itemPrice; if(basePrice < 1000) { return basePrice * 0.95; } else { return basePrice * 0.98; } } }
第一次:重構后
取消臨時變量->變成函數引用
public class Base { private int quantity; private int itemPrice; public double getTotalPrice() { if(basePrice() < 1000) { return basePrice() * 0.95; } else { return basePrice() * 0.98; } } public double basePrice() { return quantity * itemPrice; } }
再次重構:
獲取結果方法從打折和總額耦合->把打折邏輯獨立出去
public class Base { private int quantity; private int itemPrice; public double getTotalPrice() { return basePrice() * discountFactor(); } public double basePrice() { return quantity * itemPrice; } public double discountFactor() { if(basePrice() > 1000) { return 0.95; } else { return 0.98; } } }4.Introduce Explaining Variable:引入解釋變量
對于復雜查詢通過引入解釋變量來降低復雜性。
怎么區分使用 Extract Method 還是 Introduce Explaining Variable呢?在一個方法里面臨時變量很多,使用Extract Method變得很困難的時候使用它。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/76215.html
摘要:以下兩個要點將會對任何微服務重構策略產生重大影響。批量替換通過批發更換,您可以一次性重構整個應用程序,直接從單體式轉移到一組微服務器。如果您通過使用破解您的微服務器,那么每個域將圍繞一個用例,或者更常見的,一組相互關聯的用例。 在決定使用微服務之后,為了將微服務付諸實踐,也許你已經開始重構你的應用程序或把重構工作列入了待辦事項清單。 無論是哪種情況,如果這是你第一次重構應用程序,那么您...
摘要:無論如何,單元測試一直是一中非常重要卻常常被忽視的技能。在實踐中,重構的要求是很高的它需要有足夠詳盡的單元測試,需要有持續集成的環境,需要隨時隨地在小步伐地永遠讓代碼處于可工作狀態下去進行改善。 showImg(https://segmentfault.com/img/bVbttWF?w=1000&h=528); 五月初的時候朋友和我說《重構》出第 2 版了,我才興沖沖地下單,花了一個...
摘要:改進代碼設計的一個重要原則就是消除重復代碼使軟件更容易被理解優秀的代碼能夠讓接收你代碼的付出更少的學習成本。重構更容易找到重構能加深對代碼的理解。可以重構的情況添加功能時可以重構。說明你沒有發現代碼的錯誤。需要重構復審代碼時可以重構。 為何重構 重構不是銀彈,但是幫助你達到以下幾個目的 改進軟件設計 不良的程序需要更多的代碼。而代碼越多,正確的修改就越困難。改進代碼設計的一個重要原則就...
摘要:寫代碼時,代碼的運行中的控制狀態或業務狀態是會讓你的代碼流程變得混亂的一個重要原因,重構箭頭型代碼的一個很重要的工作就是重新梳理和描述這些狀態的變遷關系。重構箭頭型代碼其實是在幫你重新梳理所有的代碼和邏輯,這個過程非常值得為之付出。 所謂箭頭型代碼,基本上來說就是下面這個圖片所示的情況。 showImg(https://segmentfault.com/img/bVbfhps?w=72...
閱讀 3585·2023-04-26 01:43
閱讀 2972·2021-10-14 09:42
閱讀 5404·2021-09-30 09:59
閱讀 2172·2021-09-04 16:40
閱讀 1208·2019-08-30 15:52
閱讀 822·2019-08-29 17:09
閱讀 1993·2019-08-26 13:37
閱讀 3432·2019-08-26 10:20