Привет, я хотел бы создать свободный интерфейс для создания объекта, своего рода фабрики или строителя.
Я понимаю, что мне нужно "вернуть это", чтобы методы стали цепными.
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();
Итак, в общем, как структурировать поток свободного интерфейса и как вкладывать свободные интерфейсы?