2016-08-05 3 views
0

2つの無関係なJTableを表示する膨大なJDialogクラス(〜2000行)があります。私は3つのクラス(JDialog、Jtable1とJTable2)に分割したいと思います。どんな変数とどのメソッドが各テーブルで使用されているかを調べて関連するクラスに移動することはできますが、この手動リファクタリングは面倒です。異なるクラスへのコードの分離[Java]

このようなリファクタリングを自動化する方法はありますか?


これを達成するには、トークンのアキュムレータが必要です。最初のトークンは、例えば、panel.add(jTable2)のjTable2です。今度はjTable2を持つすべての行をチェックし、アキュムレータにトークンを追加します。新しいトークンが発見されなくなるまで、関連するトークンの検索を繰り返します。各トークンについて、それを含む行を探します。角括弧を含むように選択範囲を展開します。

おそらく最も大きな言語のプログラマーがまだこのようなツールを作っていないとは考えにくいです。これは、IDEのツールを探すのに似ているはずです。

+0

「わかりやすい最大の言語」 - 私はこれを読むまで、これは良い質問であると思いました。私はあなたがリファクタリングがどのように行われたかを理解しているとは思わない。このようなことをした他の言語はいくつですか?私の推測は「なし」です。 – duffymo

答えて

1

NetBeansでは、リファクタリング - >移動を使用できます。関連するメソッドを便利に表示するウィザードを起動します。移動したいものを選択する必要がありますが、コードを捜す必要はありません。他のIDEにも同様の機能があります。

あなたはまだ考えなければなりませんが、それらを見つけるのは退屈な部分はIDEによって行われます。

+0

これは私が探していたものです。思考は楽しいですが、おそらく関連するすべてのコード行を抽出することは楽しいことではありません。リファクタリング - >移動がこのスマートであることを知っておくとよいでしょう。 – sixtytrees

+0

"その他のIDEには同様の機能があります" - IntelliJも含まれます。それについては何も自動ではありません。 – duffymo

6

自動?いいえ、ありがとう。リファクタリングには考えが必要です。深い学習はまだありません。

ほとんどのIDE(たとえば、市場で最高のIDEであるJetBrainsのIntelliJ)は、優れたリファクタリングのサポートを備えています。

しかし、それはあなたのために考えません。

1つのアドバイス:単体テストがあれば少しずつ増やしてください。バージョンコントロールシステムを使用してください。テストを書く、変更を加える、テストがまだ通り過ぎることを示す、変更をコミットする、繰り返す。

いつでも最後の作業バージョンに戻ることができます。あなたは、単一の増分ステップよりも大きな混乱を犯さないでしょう。

あなたはもっとうまくいくと思います。リスナーを移動して、UIからコードを処理することも見てください。スイングアプリは大きなクラスで終わります。なぜなら、人々はすべてをUIクラスに詰め込むことを学ぶからです。コードを分解すると、コードを読みやすく、モジュール化しやすくなり、ユニットテストが容易になります。

+0

私はMercurialを使用します。 – sixtytrees

+0

優秀な選択。私はあなたがうまくいくと確信しています。 – duffymo

0

同様の質問をするこの投稿(How to refactor thousands of lines of Java code? Is there any tool available?)を見てください。

基本的に、クラスに入れたいものが分かったら、クラスを抽出するのに役立ついくつかのプロダクション品質ツールがあります。注目すべきは、IntelliJのIDEAには良い「抽出クラス」のリファクタリングがあることです。

難しい部分は、これらのクラスにどのような要素を取り入れるべきかを決定することです。 AFAIK、そこには研究ツールしかありません。

関連する問題