【发布时间】:2019-11-20 02:27:02
【问题描述】:
是否总是可以通过创建更多方法来绕过得墨忒耳法则?
有人提到这是无效的 (http://wiki.c2.com/?LawOfDemeterIsHardToUnderstand),但它似乎应该是有效的,因为得墨忒耳法则允许向任何参数发送消息。
例如,这违反了得墨忒耳定律(假设m1 不返回a1)但可以重构:
class C1 {
m1 (a1: C2) {
a1.m1().m2() // not allowed
}
}
对m2的访问可以重构为另一种方法:
class C1 {
m1 (a1: C2) {
m2(a1.m1()) // allowed
}
m2 (a1: C3) {
a1.m2()
}
}
【问题讨论】:
-
“我希望它被称为 Demeter 的偶尔有用的建议。”马丁·福勒
-
我更喜欢将其称为“Martin Fowler 偶尔有用的建议”。 :) 即使 Martin Fowler 知道什么时候违反 LoD 是可以的,但您可能不知道。所以停止这样做!
标签: oop software-quality law-of-demeter