有两个代码段:
someObject.getBla1().getBla2().performBlah();
Run Code Online (Sandbox Code Playgroud)
第二个:
bla1=someObject.getBla1();
bla2=bla1.getBla2();
bla2.performBlah();
Run Code Online (Sandbox Code Playgroud)
我总是被告知要避开第一个,并使用第二个,因为我觉得第二个只是一个痛苦.
第二个有什么好处?
避免两种形式.该得墨忒耳定律是一个重要的指导原则编写的软件,指出当
每个单位应该对其他单位的知识有限:只有与当前单位"密切"相关的单位.
每个单位只应与其朋友交谈; 不要和陌生人说话.
只与你的直接朋友交谈.
你违反了这项法律,因为someObject知道bla2有一种performBlah方法.如果它确实需要有这种方法他们将其移动到someObject和隐藏bla1,并bla2从外面的世界.
someObject.getBla1().getBla2().performBlah()然后会变成someObject.performBlah()并且内部实现someObject.performBlah可能会委托给bla1代表来bla2实现.重要的是要确保每个对象只知道它的直接朋友,并且不会进入更广阔的世界(例如,someObject只知道bla1,bla1只知道bla2).