LoginSignup
0
0

More than 3 years have passed since last update.

デメテルの法則

Posted at

デメテルの法則に沿わない、ダメな例

// NG。以下のようなコードを書くべきではない
class A {
  private B b;

  public B getB() {
    return b;
  }
}


class B {
  public void hoge() {
    System.out.println("hoge");
  }
}

class Test {
  public static void main(String[] args) {
    new A().getB().hoge();
  }
}

デメテルの法則に沿う、良い例

// OK。以下のようなコードが望ましい
class A {
  private B b;

  public void hoge() {
    b.hoge();
  }
}


class B {
  public void hoge() {
    System.out.println("hoge");
  }
}

class Test {
  public static void main(String[] args) {
    new A().hoge();
  }
}

なぜデメテルの法則に沿うようにするとよいのか?

例えば、クラスBのメソッド名が「hoge」から「fuga」に変わった場合、デメテルの法則が適用されている方のコードはTestクラスの中のコードを変更する必要はない。しかしデメテルの法則が適用されていない方のコードは、Testクラスのコードも変更する必要がある。(つまり、変更箇所が増える)

class A {
  private B b;

  public void hoge() {
    // ↓ここを変えた
    b.fuga();
  }
}


class B {
  // ↓ここを変えた
  public void fuga() {
    System.out.println("fuga");
  }
}

class Test {
  public static void main(String[] args) {
    new A().hoge();
  }
}

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0