我收到了代码审核反馈
someObject?.SomeChild?.SomeGrandChild
违反了得墨忒耳的法律。相反,我应该能够做类似
的事情someObject?.SomeGrandChild
这里的好习惯是什么?
答案 0 :(得分:0)
肯定违反了LoD。引用(来自维基百科):
当应用于面向对象程序时,可以更准确地将得墨忒耳定律称为“函数/方法的Demeter定律”(LoD-F)。在这种情况下,对象A可以请求对象实例B的服务(调用方法),但是对象A不应“到达”对象B以访问另一个对象C以请求其服务。这样做意味着对象A隐含地需要更多地了解对象B的内部结构。相反,如果需要,应该修改B的接口,以便它可以直接服务于对象A的请求,将其传播到任何相关的子组件。或者,A可能直接引用对象C并直接向该请求发出请求。如果遵循法律,只有对象B知道自己的内部结构。
相反,在SomeChild中提供一个公共方法,使您可以访问所需的SomeGrandChild。