ウィキペディアから始めましょう:
より正式には、関数のデメテルの法則では、オブジェクトOのメソッドmは、次の種類のオブジェクトのメソッドのみを呼び出す必要があります。
- 〇そのもの
- m のパラメーター
- m 内で作成/インスタンス化されたオブジェクト
- O の直接コンポーネント オブジェクト
- m のスコープ内で、O からアクセスできるグローバル変数
ルール 1:
public class ClassOne {
public void method1() {
method2();
}
public void method2() {
}
}
ルール 2:
public class ClassOne {
public void method1(ClassTwo classTwo) {
classTwo.method2();
}
}
class ClassTwo {
public void method2() {
}
}
ルール 3:
public class ClassOne {
public void method1() {
ClassTwo classTwo = new ClassTwo();
classTwo.method2();
}
}
class ClassTwo {
public void method2() {
}
}
ルール 4 (@juharr に感謝):
public class ClassOne {
private ClassTwo classTwo;
public void method1() {
classTwo = new ClassTwo();
classTwo.method2();
}
}
class ClassTwo {
public void method2() {
}
}
ルール 5:
?
ルール 5 を手伝ってくれる人はいますか?
そして、デメテルの法則は連鎖が悪いことを暗示していませんか?
User.getName().getLastName();
これにより、結合度が高くなります。
「聞くな、聞くな」も似たような原理ではないでしょうか。
これで全部ですか?私は何か間違っていますか?どうすればデメテルの法則に従うことができますか?