【发布时间】:2014-06-30 16:20:57
【问题描述】:
假设我有一个非常深的对象图,作为一个简化的例子,像这样
class Car {
Engine Engine { get; set; }
Dashboard Dashboard { get; set; }
IEnumerable<Wheel> Wheels { get; set; }
}
class Engine {
Pump FuelPump { get; set; }
Motor StarterMotor { get; set; }
}
为了这个例子,我想要一个负责执行此操作的 CarStarter,而不是 Car 具有 Start() 方法。想象一下 Car 可以是一个大的、深度嵌套的对象图,而 CarStarter 只需要访问几个属性,其中一些属性有几个层次。我应该将 Car 对象传递给 CarStarter,还是只传递重要的属性?那么在我的简化示例中有哪些重载?
class CarStarter {
void Start(Car car) {
car.Dashboard.Lights.SwitchOn();
car.Engine.FuelPump.Run();
car.Engine.StarterMotor.Start();
}
void Start(Dashboard dashboard, Pump fuelPump, Motor starterMotor) {
dashboard.Lights.SwitchOn();
fuelPump.Run();
starterMotor.Start();
}
}
前者感觉不对,因为它要求 CarStarter 深入了解 Car 类的整个嵌套结构的结构及其属性。在单元测试中传递给 CarStarter 时,需要填充 Car 对象的哪些属性也有点不透明。
对我来说,后者似乎是更好的选择,但有可能导致参数过多。
【问题讨论】:
标签: design-patterns