Я искал веские причины, если мы должны попытаться избегать операторов switch/case и как это сделать для перечислений и предложений, как рассмотреть следующий пример: (обратите внимание, что этот переключатель/регистр может быть разбросаны по всей кодовой базе)Записи и заявления о случаях
switch (theEnum)
{
case MyEnum.Enum1:
// dosomething
case MyEnum.Enum2:
// do something
case MyEnum.Enum3:
// do something
default:
throw new Exception("Unsupported enumeration: " + theEnum.ToString());
}
VS.
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 более OO, но мне было интересно, что другие Thi как этот подход, и если есть хорошие и веские причины, по которым мы должны стремиться делать это или нет.
Можно утверждать, что принципы, такие как switch/else, будут нарушать, например, open-close.
Если вы концентрируетесь на сложности Cyclometric, и если методы всегда должны быть расширяемыми, то подход OO лучше. – Zenwalker
Следует отметить, что коммутатор будет выполнять МНОГО быстрее. Прогулка по списку также будет быстрее, чем использование словаря, если в словаре не будет около 10 или более предметов. –