Я ищу веские причины, если мы должны попытаться избежать операторов switch / case и как это сделать для перечислений, и предложений как, рассмотрим следующий пример: (обратите внимание, что этот switch / case может быть разбросан по всему кодуbase)
switch (theEnum)
{
case MyEnum.Enum1:
// dosomething
case MyEnum.Enum2:
// do something
case MyEnum.Enum3:
// do something
default:
throw new Exception("Unsupported enumeration: " + theEnum.ToString());
}
против
public Dictionary<MyEnum, StrategyBase> BuildMapper()
{
var mapper = new Dictionary<MyEnum, StrategyBase>();
mapper[MyEnum.Enum1] = new Strategy1();
mapper[MyEnum.Enum2] = new Strategy2();
mapper[MyEnum.Enum3] = new Strategy3();
return mapper;
}
BuildMapper()[MyEnum.Enum1].DoSomething();
Вариант 2 - это больше ОО, но мне было интересно, что другие думают об этом подходе, и есть ли хорошие ивеские причины, по которым мы должны стремиться делать это или нет.
Можно утверждать, что такие принципы, как switch / else, будут нарушать, например, open-close.