内部の情報をさらに洗練する列挙値であるeventargsオブジェクトを内部で受け取るイベントハンドラーがあります。それは次のように見えます
public enum StatusCallbackType { Status1, Status2, Status3, Status4 }
public class StatusEventArgs
{
public StatusCallbackType Type {get;set;}
public StatusData Data {get; set;}
}
Statusdataは、指定されたCalllbackTypeに応じて変化する基本抽象クラスです。
これで、イベントを処理するコードは次のようになります。
switch e.Type
{
case Status1:
DoAction1(e.Data as Opt1Data);
break;
case Status2:
DoAction1(e.Data as Opt2Data);
break;
case Status3:
DoAction1(e.Data as Opt3Data);
break;
}
問題は、StatusNotificationsを変更したり、処理方法を変更したりする場合、非常に大きくなる可能性のあるスイッチを調整する必要があることです。特定のステータスのハンドラーを挿入できるものを使用することを考えていました。
一方で、今は本当に必要ありません。スイッチソリューションは機能しますが、大きくなり始めているので、メインタンブルではないという気持ちとYAGNIの間で戦っています。
そのようなスイッチをIOCパターンに変換できるパターンはありますか?そのスイッチを実際にリファクタリングする必要があると思いますか?