3

クラス Foo があるとします

class Foo {
    protected String x = "x";

    public String getX() {
        return x;
    }
}

Foo を使用し、LoD に違反するプログラムがあります

class Bar {
    protected Foo foo;

    public Bar() {
        this.foo = new Foo();
    }

    public Foo getFoo() {
        return foo;
    }
}

public static void main(String [] args) {
    Bar bar = new Bar();
    String x = bar.getFoo().getX(); 
}

LoD を使用するためのリファクタリングは次のようになります。

class Bar {
    protected Foo foo;

    public Bar() {
        this.foo = new Foo()
    }

    public String getFooX {
        return foo.getX();
    }
}

public static void main(String [] args) {
    Bar bar = new Bar();
    String x = bar.getFooX();
}

IntelliJ-IDEA には多くのリファクタリング メソッドがあります (メソッドへの抽出、変数への抽出、インラインなど)。

bar.getFoo().getX()コードを次のようにリファクタリングする IntelliJ-IDEA のメソッドはありbar.getFooX()ますか?

4

1 に答える 1

6

あなたの例がJavaコードであると仮定すると、次のことができます:

  1. Extract メソッド on bar.getFoo().getX()(作成中getFooX())
  2. 作成したメソッドgetFooX()Bar必要に応じて移動
  3. でコード重複の検索と置換を呼び出すgetFooX()
  4. でConvert To Instance メソッドを呼び出すgetFooX()
  5. ステップ3を忘れた場合は、必要$a$.getFoo().getX()に応じて構造を置き換えます;-)$a$.getFooX()
  6. のすべての呼び出しをインライン化しますgetFoo()(内のみにする必要がありますgetFooX())
于 2015-07-03T09:37:50.083 に答える