2016-08-05 50 views
0

我有一個臃腫的JDialog類(〜2000行),顯示兩個不相關的JTables。我想將它分成三個類(JDialog,Jtable1和JTable2)。我可以研究每個表使用哪些變量和哪些方法並將它們移動到相關的類,但是這種手動重構將會很乏味。代碼分離到不同的類[Java]

有沒有什麼辦法來自動化這種重構?


爲了達到這個目的,腳本應該有一個令牌累加器。第一個令牌是,例如來自panel.add(jTable2)的jTable2。現在檢查其中有jTable2的所有行,並向累加器添加標記。重複搜索相關標記,直到未發現新標記爲止。現在爲每個標記查找包含它的行。擴大選擇以包含括號。

很難相信可以說是最大語言的程序員還沒有創建這樣的工具。這應該與在IDE中查找使用工具非常相似。

+0

「可以說是最大的語言」 - 我認爲這是一個很好的問題,直到我讀了這個補充。我不認爲你明白重構是如何完成的。其他語言有多少人做過這樣的事情?我的猜測是「沒有」。 – duffymo

回答

1

在NetBeans中,您可以使用Refactor-> move。它啓動一個嚮導,方便地顯示相關的方法。你需要選擇你想移動的那些,但是你不必在代碼中搜索。其他IDE具有相似的功能。

這樣你仍然需要思考,但是找到它們的無聊的部分是由IDE完成的。

+0

這就是我一直在尋找的東西。思考很有趣,提取所有可能相關的代碼行不是。很高興知道重構 - >移動就是這個聰明。 – sixtytrees

+0

「其他IDE具有類似的功能」 - 包括IntelliJ。沒有什麼是自動的。 – duffymo

6

自動?不,謝天謝地。重構需要思考。深度學習還沒有。

大多數IDE(例如JetBrains的IntelliJ,市場上最好的IDE)具有出色的重構支持。

但它不會爲你想。

一條建議:如果您有單元測試,以小增量進行測試,並使用版本控制系統,那麼您會有更好的運氣。寫一個測試,做一個改變,表明測試仍然通過,提交改變,重複。

您可以隨時回到最後一個工作版本。你不會做出比單個增量步驟更大的混亂。

我認爲你可以做得更好:看看移動偵聽器並將代碼處理出UI。由於人們學習將所有內容都塞進UI類,所以Swing應用程序最終需要大類。如果你分解它,你會發現代碼更容易閱讀,更模塊化,更容易進行單元測試。

+0

我使用Mercurial。 – sixtytrees

+0

最佳選擇。我相信你會好起來的。 – duffymo

0

看看這個帖子(How to refactor thousands of lines of Java code? Is there any tool available?),問一個類似的問題。

基本上,有一些生產質量工具可以幫助你提取類,一旦你知道什麼是你想要放在類中。值得注意的是,IntelliJ的IDEA有一個很好的「提取類」重構。

更難的部分是確定應該進入這些類的內容。 AFAIK,只有研究工具可用於此。