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