让我们从维基百科开始:
规则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/