Design patterns 对象图或单个属性作为方法参数?

Design patterns 对象图或单个属性作为方法参数?,design-patterns,Design Patterns,假设我有一个很深的对象图,作为一个简化的例子,类似这样的东西 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; }

假设我有一个很深的对象图,作为一个简化的例子,类似这样的东西

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类的整个嵌套结构的结构及其属性。对于在单元测试中传递给CarStarter时需要填充Car对象的哪些属性,它也有点不透明


对我来说,后者似乎是更好的选择,但有可能会有太多参数。

我们可以创建一个参数对象,如下所述:

我缺少的关键短语是。我很确定这一问题属于一种代码气味的普遍支持,但被违反的确切“规则”似乎是德米特法,或最少知情原则。

谢谢你的建议。这是一种有趣的看待它的方式。我几乎来自相反的方向——在本例中,参数列表并不太长;太短了。我们正在传递一个已经可以访问其他所有内容的对象,但这取决于使用这种方法的每个方法都对这个“参数对象”的结构有深入的了解。
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();
    }
}