Привет, я хотел бы создать удобный интерфейс для создания объекта типа фабрики или строителя.
Я понимаю, что я должен "вернуть это", чтобы сделать методы цепными.
public class CarBuilder
{
public CarBuilder()
{
car = new Car();
}
private Car car;
public CarBuilder AddEngine(IEngineBuilder engine)
{
car.Engine = engine.Engine();
return this;
}
public CarBuilder AddWheels(IWheelsBuilder wheels)
{
car.Wheels = wheels.Wheels();
return this;
}
public CarBuilder AddFrame(IFrameBuilder frame)
{
car.Frame = frame.Frame();
return this;
}
public Car BuildCar()
{
return car;
}
}
с этим я мог бы построить такую машину:
Car c = builder.AddFrame(fBuilder).AddWheels(wBuilder).AddEngine(eBuilder).BuildCar();
Но что мне нужно, так это особая последовательность или рабочий процесс: я могу построить колеса только поверх рамы, и когда колеса будут готовы, я смогу собрать двигатель. Поэтому вместо того, чтобы предлагать все методы сборки автомобиля, я хочу иметь возможность добавить в сборщик только раму, а затем только колеса к раме, а затем двигатель поверх этого...
И как бы это было или что было бы хорошей реализацией, если бы сам EngineBuilder имел плавный API, такой как eBuilder.Cylinders(12).WithPistons()....
Возможно ли иметь что-то подобное
Car c = builder.AddFrame(fBuilder).AddWheels(wBuilder).AddEngine(x=>x.WithCylinders(12).WithPistons()).BuildCar();
Итак, в общем, как структурировать поток свободного интерфейса и как вкладывать плавные интерфейсы?