让我们从维基百科开始:



规则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();

这导致高耦合。

“说,不问”难道不是一个类似的原则吗?

那么这就是一切吗?我错了吗?你怎么能遵守得墨忒耳定律?

最佳答案

“告诉不要问”有点不同。

得墨忒耳:不要拿东西去拿东西来做最后的事情。

TDA:不要从另一个对象检索“信息”然后对此做出决定。简单的例子:

if (someList.size() == 0) { bla

对比
if (someList.isEmpty()) { bla

在这两种情况下,您都是在其他对象上调用方法;但是有一个关键的区别:第一个调用向您公开了另一个对象的“内部”状态;然后你做出一些决定。鉴于,在“TDA”改进的第二个版本中;您将“状态评估”留在该其他对象中;从而以某种方式减少耦合。

但只是为了记录:第二个示例仍然根据该列表的状态做出决定。从这个角度来看,它只是比选项 1 稍微好一点的版本。理想情况下,您不需要这样的检查。

关于java - 什么是得墨忒耳定律?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35925357/

10-15 03:52