关于德米特定律,我有三个问题。
除了专门指定用于返回对象的类(例如工厂类和构建器类)之外,还可以使用一种方法来返回对象,例如,由该类的一个属性持有的对象,或者会违反demeter(1)的定律。?并且,如果它违反了demeter的定律,那么返回的对象是否是一个不可变的对象(表示一个数据,并且除了该数据的吸气剂之外就什么也不包含)(2a),这会很重要吗?还是这样的ValueObject本身就是反模式,因为使用该类中的数据完成的所有操作都是在类(2b)之外完成的?
用伪代码:
class A {}
class B {
private A a;
public A getA() {
return this.a;
}
}
class C {
private B b;
private X x;
public void main() {
// Is it okay for B.getA to exist?
A a = this.b.getA();
a.doSomething();
x.doSomethingElse(a);
}
}
我怀疑得墨meter耳的定律禁止这种模式。我该怎么做才能确保doSomethingElse()
在不违反法律的情况下可以被调用(3)?
x
设置?
x
只是一个不同的属性,其值只是一些可以调用的对象doSomethingElse
。
user.currentSession.isLoggedIn()
。因为它user
不仅将的客户与user
合作者耦合在一起session
。相反,您希望能够书写user.isLoggedIn()
。这通常可以通过isLoggedIn
向其user
实现委托的方法添加一个方法来实现currentSession
。