为什么要避免点运算符链接

1 refactoring coding-style

有两个代码段:

someObject.getBla1().getBla2().performBlah();
Run Code Online (Sandbox Code Playgroud)

第二个:

bla1=someObject.getBla1();
bla2=bla1.getBla2();
bla2.performBlah();
Run Code Online (Sandbox Code Playgroud)

我总是被告知要避开第一个,并使用第二个,因为我觉得第二个只是一个痛苦.

第二个有什么好处?

Jef*_*ter 5

避免两种形式.该得墨忒耳定律是一个重要的指导原则编写的软件,指出当

每个单位应该对其他单位的知识有限:只有与当前单位"密切"相关的单位.

每个单位只应与其朋友交谈; 不要和陌生人说话.

只与你的直接朋友交谈.

你违反了这项法律,因为someObject知道bla2有一种performBlah方法.如果它确实需要有这种方法他们将其移动到someObject和隐藏bla1,并bla2从外面的世界.

someObject.getBla1().getBla2().performBlah()然后会变成someObject.performBlah()并且内部实现someObject.performBlah可能会委托给bla1代表来bla2实现.重要的是要确保每个对象只知道它的直接朋友,并且不会进入更广阔的世界(例如,someObject只知道bla1,bla1只知道bla2).