說我有一個相當深的對象圖,作爲一個簡單的例子,像這樣對象圖或單個屬性作爲方法參數嗎?
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; }
}
而對於例如着想,而不是有一個start()方法車,我想有一個CarStarter負責這樣做。想象一下,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到有關於汽車類及其屬性的整個嵌套結構的結構深入的瞭解。當在單元測試中傳遞給CarStarter時,Car對象的哪些屬性需要填充也是稍微不透明的。
後者對我來說似乎是更好的選擇,但有可能導致參數過多。
感謝您的建議。這是一個有趣的看待它的方式。我幾乎來自相反的方向 - 在這種情況下,參數列表不會太長;太短了。我們正在傳遞一個可以訪問所有其他對象的對象,但是這依賴於每種使用此方法的方法都深入瞭解此「參數對象」的結構。 – Darran