スイッチ/ケースステートメントを避け、列挙型でこれを行うことを避けようとすると良い理由があります。次の例を考えてみましょう: (このスイッチ/ケースはすべて列挙型と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());
}
対)コードベースに散らばっ
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はあるが、私は他の人が考えているかと思いました私たちがこれをするかどうかに努めなければならない理由がある場合は、このアプローチを使用してください。
switch/elseのような原則は、例えばオープン・クローズに違反すると主張するかもしれません。 OOのために
Cyclometricの複雑さに集中し、メソッドが常に拡張可能である必要がある場合は、オブジェクト指向のアプローチが優れています。 – Zenwalker
スイッチは非常に高速に動作することに注意してください。あなたが辞書に約10以上の項目を持っていない限り、リストを歩くことは、辞書を使うよりも速くなるでしょう。 –