Часто в различных проектах, которые используют DI, встречаю примерно такую реализацию фабричного метода с использованием enum :
class VehicleFactory
{
public Vehicle Create(VehicleType type)
{
switch (type)
{
case Car:
return new Car();
case Truck:
return new Truck();
}
}
}
Такой класс придется менять если появится какой-то новый тип. Но если добавить в базовый Vehicle метод GetType() и воспользоваться DI, то класс менять не придется сколько бы новых типов не появилось:
class VehicleFactory
{
private readonly List<Vehicle> vehicles; // внедряется через конструктор
public Vehicle Create(VehicleType type)
{
vehicles.FirstOrDefault(vehicle => vehicle.GetType() == type);
}
}
Правильно ли так делать и есть ли в этом решении какие - либо минусы ? На мой взгляд это лучше чем свич на несколько сотен строк, но не видел чтобы кто-то так делал, не понимаю почему