代碼重構工具

代碼重構工具是進行代碼重構時使用的專業工具。一般指的是計算機 程式代碼。

工具介紹,方法與變數,生成接口,析取方法,析取父類,修改方法簽名,析取簽名DTO,遷移資源檔案,

工具介紹

代碼重構工具有很多,無論你使用的技術是什麼。不管是Java、PHP、.NET還是其他,都有工具幫助重構代碼的繁重過程變得輕鬆一點和安全。實際上,其數量已經多到眼花繚亂令人難以選擇的地步。
在此,我們將討論一下在選擇工具時應該檢查哪些功能,並解釋每一項功能究竟會如何影響到重構的過程。

方法與變數

重命名方法和變數是我在重構代碼時最常做的事情。對於我之前的開發者來說很明顯的事情(所以沒有採用長長的描述性名字)對於那些剛接觸這些代碼的人來說未必那么明顯。每次掃描新的代碼庫去了解它時,我都會對變數和方法進行重命名,以便更徹底地了解它們是做什麼用的。
幾乎所有的代碼重構工具都會做這個,但是你應該留意的是也可以修改注釋的工具。注釋往往會通過名字引用變數,如果你對變數進行了重命名,那些注釋就沒有意義了。

生成接口

繼重命名功能之後,生成接口是我最常用的功能。更新老代碼往往意味著要引入對現有類的接口以便引入控制反轉。人工生成接口並不困難,但是重新輸入所有你往曝光的屬性和方法簽名十分單調乏味且容易出錯。

析取方法

把一個大方法分解成可測試的片段,這是重構單元測試時的一種常見做法。有這么一個功能,讓你可以突出一批行並將它們析取到獨立的方法,再利用適當的參數來完善該方法,這樣的話可以節省大量時間。
使用這種重構時,要小心檢查生成的代碼。我尚未發現有哪款重構工具能夠做好這一點的,儘管其生成的東西至少讓我可以開始了。未來獲得最好的結果,要留意突出來析取出去的行,確保你把該範圍內任何本地變數都包含進來了。哪怕變數是本地的,如果聲明沒有被包含突出的部分也會被當作參數傳遞。幸運的是,做出來的方法只在一個地方使用,因此人工重構參數也不難。

析取父類

跟遺留代碼打交道時,我發現基類的想法很少被實現過。我喜歡把儘可能多的邏輯放進基類,然後繼承給子類,從而讓處理更加容易,並幫助處理泛型方法和類。
在定義基類的時候,有個重構功能可以把父類(或超類)析取處理是有幫助的。在基類中選擇你想要的屬性和方法,然後點擊按鈕來創建新類,讓當前的繼承自它。不幸的是,我從未發現有代碼重構工具也可以掃描別的類來找出兄弟類的。不過隨著人工智慧的進步,也許我們會看到這種功能的出現。

修改方法簽名

操作方法簽名很容易出錯,尤其是當所有的參數都是一樣的時候。如果你有一個方法要取兩個字元串,但是因為某些原因參數的順序對於你來說是沒有意義的會怎樣?沒有自動化的方法簽名操作,改變這些參數的次序是有風險的,因為如果你忘記改變其中一個方法調用的次序的話,編譯器是不會發現問題的。

析取簽名DTO

我是目錄工具包輸出(DTO)的冬粉,DTO是用來供參數多於1、2個的方法間傳遞數據的。有一個常常的參數清單是很難讀的,也很難隱藏不同方法之間的關係—如果兩個方法都有著相同的長簽名,相對於兩個都使用相同DRO作為參數的方法來說會更難看清楚。給DTO增加一些驗證邏輯以確保所有必要的數據都具備也是有可能的(我知道這延伸了DTO的定義,但現在我們先不管這一點)。
如果重構功能可以從簽名中析取DTO的話,那它應該也可以重構所有使用該DTO的調用代碼。這可能會有大量代碼。在使用的時候,這一功能可以節省大量時間。

遷移資源檔案

我最後的一項建議自己不經常用,但需要用到時,它可以節省大量時間。在給現有套用增加I18N支持時,所有的那些硬編碼進app的字元串都需要遷移到資源檔案。這是一項辛苦、乏味、容易出錯的工作,很快就讓我想休息一下。如果你給任何套用增加多語言支持的話,單這項功能就值得上你為代碼重構工具的任何付出了。

相關詞條

熱門詞條

聯絡我們