Npert条件算子和Demeter定律

时间:2017-05-19 12:35:59

标签: c# law-of-demeter

我收到了代码审核反馈

someObject?.SomeChild?.SomeGrandChild

违反了得墨忒耳的法律。相反,我应该能够做类似

的事情
someObject?.SomeGrandChild

这里的好习惯是什么?

1 个答案:

答案 0 :(得分:0)

肯定违反了LoD。引用(来自维基百科):

  

当应用于面向对象程序时,可以更准确地将得墨忒耳定律称为“函数/方法的Demeter定律”(LoD-F)。在这种情况下,对象A可以请求对象实例B的服务(调用方法),但是对象A不应“到达”对象B以访问另一个对象C以请求其服务。这样做意味着对象A隐含地需要更多地了解对象B的内部结构。相反,如果需要,应该修改B的接口,以便它可以直接服务于对象A的请求,将其传播到任何相关的子组件。或者,A可能直接引用对象C并直接向该请求发出请求。如果遵循法律,只有对象B知道自己的内部结构。

相反,在SomeChild中提供一个公共方法,使您可以访问所需的SomeGrandChild。