2

我有类似的东西:self.megacity.resourceloader.sound.mcintro.play()

有什么优雅的方法可以防止这样长的东西吗?也许是某种结构性变化?

谢谢。

4

3 回答 3

2
x = self.megacity.resourceloader.sound.mcintro
x.play()
于 2012-07-07T21:44:10.413 回答
2

查阅得墨忒耳定律以帮助您找到更好的方法来放松程序中组件之间的耦合:

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

于 2012-07-07T21:48:48.983 回答
0

使用Facade 模式,例如:

class SoundPlayer:
    def play_megacity(self):
        return self.megacity.resourceloader.sound.mcintro.play()
于 2012-07-07T22:59:27.997 回答