而不是(作为一般建议的伪代码)...
config <-- ...
A.constructor (config) {
this.foo = config.foo
this.bar = config.bar
this.objectB = createB (config)
}
B.constructor (config) {
this.frob = config.frob
this.objectC = createC (config)
}
C.constructor (config) {
this.frobnicate = config.frobnicate
this.objectD = createC (configD)
}
你应该只传递真正需要的东西:
config <-- ...
A.constructor (foo, bar, frob, frobnicate) {
this.foo = foo
this.bar = bar
this.objectB = createB (frob, frobnicate)
}
B.constructor (frob, frobnicate) {
this.frob = frob
this.objectC = createC (frobnicate)
}
C.constructor (frobnicate) {
this.frobnicate = frobnicate
}
让您的州尽可能本地化。全局状态是无数调试恐怖场景的根源(我闻到你刚刚遇到过)。
另外,许多类不必知道它们的对象是什么样子,它们只对公共接口感兴趣。您可以应用依赖倒置,然后:
config <-- ...
objectC = createC (config.frobnicate)
objectB = createB (config.frob, objectC)
objectA = createA (config.foo, config.bar, objectB)
使用依赖倒置意味着你的类不需要知道太多。例如,Car 不需要知道Trailer 及其组成,它只需要知道CouplingDevice:
trailer = createTrailer (...)
couplingDevice = createCouplingDevice (...)
car.install (couplingDevice)
couplingDevice.attach (trailer)