私は、本質的に地理的な入力を使用して表形式の結果を生成する、会社用の Web ベースのツールを作成しようとしています。現在、3 つの異なるビジネス分野が私のツールを使用しており、3 種類のアウトプットを受け取ります。幸いなことに、すべての出力はマスター テーブル - 子テーブルという同じ考え方に基づいており、共通のマスター テーブルを共有しています。
残念ながら、いずれの場合も、子テーブルの関連する行には大きく異なるデータが含まれています。これが唯一の争点であるため、FetchChildData
メソッドを という別のクラスに抽出しましたDetailFinder
。その結果、私のコードは次のようになります。
DetailFinder DetailHandler;
if (ReportType == "Planning")
DetailHandler = new PlanningFinder();
else if (ReportType == "Operations")
DetailHandler = new OperationsFinder();
else if (ReportType == "Maintenance")
DetailHandler = new MaintenanceFinder();
DataTable ChildTable = DetailHandler.FetchChildData(Master);
PlanningFinder、OperationsFinder、および MaintenanceFinder はすべて DetailFinder のサブクラスです。
if
別のビジネス分野のサポートを追加するように依頼されたばかりで、このブロックの傾向が続くのは嫌です。私が好むのは、次のような解析メソッドを持つことです。
DetailFinder DetailHandler = DetailFinder.Parse(ReportType);
DetailFinder
ただし、 ifブロックをメソッドにシフトするだけでなく、各文字列を処理するサブクラス、または存在するサブクラスを知る方法について途方に暮れていParse
ます。サブクラスが自分自身を抽象に登録する方法はありDetailFinder
ますか?