10

クラスを他のいくつかのクラスに分割して、一部のコードをリファクタリングしようとしています。そのために、古いクラスに既に存在するいくつかのメソッドを新しいクラスに移動したいと考えています。しかし、これらのメソッドは多くの場所で参照されており、参照を手動で更新するのは面倒です。メソッドを移動し、Eclipse で参照を更新する方法はありますか?

4

6 に答える 6

10

私はこのようにします:

  1. テストが機能し、リファクタリングされるコードがカバーされていることを確認してください。テストがない場合は、テストを作成します。彼らはあなたの安全ロープです。
  2. リファクタリング パターン抽出スーパークラスを使用して、いくつかのメソッドを移動する新しいクラスを作成します。
  3. リファクタリング パターンのプルアップ メソッドを使用して、必要な変数とともにメソッドをスーパークラスに移動します。これで、移動したいメソッドとインスタンス変数に、移動したくない他のメソッドへの依存関係があるかどうかがわかります。もしそうなら、まずこの依存関係を壊さなければなりません。
  4. 「古い」クラスの代わりに新しく抽出されたクラスを使用する必要があるすべてのクライアント コードを見つけて、新しい抽出されたクラスに書き直します。
  5. 2 つのクラス間の「拡張」関係を削除します。これでクライアント コードが動作するはずです。

また、リファクタリング パターンを適用する方法を学習するための優れた本は、レガシー コードを効果的に使用することです。

于 2013-11-15T06:52:28.823 に答える
1
  1. メソッドを新しいクラスにコピーします。
  2. 古いクラスのメソッド本体を新しいクラスへの呼び出しに置き換えます。
  3. 古いメソッドをインライン化します。

それだけです。手順 1 と 2 で引数を追加したり、メソッドを静的にする必要がある場合があるため、それほど単純ではないかもしれませんが、それがその方法の本質です。

于 2013-11-15T14:48:24.133 に答える
1

それはあなたの満足のいずれかを持っていますか

package com.hussi.stackOverFlow;
class ClassOne {

    public void methodInClassOne(String stringParam)
    {
        ClassTwo classTwoObj = new ClassTwo();
        classTwoObj.methodInClassTwo(stringParam);
    }

}


class ClassTwo {

    public void methodInClassTwo(String stringParam)
    {
        System.out.println(stringParam);
    }

}


public class ClassThree {

    public static void main(String[] args) 
    {
        ClassOne objClassOne = new ClassOne();
        // calling method of class two in class one
        objClassOne.methodInClassOne("pass this String value");

    }

}
于 2013-11-15T06:55:04.710 に答える