确定方法结构合不合理的简单办法
著名的得墨忒耳律(TheLawofDemeter)认为,模块不应了解它所操作对象的内部情形。如上节所见,对象隐藏数据,曝露操作。这意味着对象不应通过存取器曝露其内部结构,因为这样更像是曝露而非隐藏其内部结构。
更准确地说,得墨忒耳律认为,类C的方法f只应该调用以下对象的方法:
- C
- 由f创建的对象;
- 作为参数传递给f的对象:
- 由C的实体变量持有的对象。
- 方法不应调用由任何函数返回的对象的方法。
换言之,只跟朋友谈话,不与陌生人谈话。
下列代码²违反了得墨忒耳律(除了违反其他规则之外),因为它调用了getOptions(()返回值的getScratchDir(()函数,又调用了getScratchDir(()返回值的getAbsolutePath()方法。
final String outputDir=ctxtgetOptions() getScratchDir().getAbsolutePath();