アルゴリズムに与えられた 2 つの引数に依存する分類 (文字列) のリストを返すアルゴリズムがあります。型変数と、特定の特別な分類を結果リストに追加できるようにする追加のカテゴリ文字列です。
現在の実装は、ルールが if や switch ステートメントとして表現されているため、判読できず、拡張もできません。また、ルールはハードコーディングされています。
コードの簡略版:
private static List<string> DetermineTypes(Type x, object category) {
List<string> Types = new List<string>();
if (category is DateTime) {
types.Add("1");
types.Add("2");
types.Add("3");
} else if (category is string) {
switch ((string)category) {
case "A":
Types.Add("4");
break;
case "B":
case "C":
case "D":
Types.Add("5");
break;
case "":
Types = DetermineTypesFromX(Types, x);
break;
default:
Types.Add("6");
break;
}
}
return graphTypes;
}
private static List<string> DetermineTypesFromX(List<string> Types, Type x) {
if (x.Equals(typeof(int))) {
Types.Add("7");
} else if (x.Equals(typeof(double))) {
Types.Add("8");
} else if (x.Equals(typeof(System.DateTime))) {
Types.Add("9");
Types.Add("10");
}
return Types;
}
これらを xml で指定するとよいのではないかと考えていたので、新しいタイプやルールにコードの変更を加える必要はありませんでしたが、この状況ではおそらく重すぎます。基本的に、新しい「タイプ」がいつでも追加される可能性があるという問題を解決しようとしています。一般的なケースは、それが上記の「ルール」の 1 つであり、新しい「ルール」ブランチが必要になる可能性が低いエッジケースです。追加されます。
エッジケースが発生する可能性やビジネス環境(スケジュールなど)と比較して、xml定義のルール(またはその他の方法)を使用して完全に動的にするために必要な作業が価値があるかどうかを判断する必要があります。
しかし、質問の主なポイントは、上記のネストされた条件付きコードをどのようにエレガントに単純化できるかということです。スケーラビリティを向上させるために、設計により多くの柔軟性を組み込むことはできますか?
F# のパターン マッチングを組み合わせて使用することが適切な解決策になるのではないかと考えていました。(注: F# を使用したことがなく、最近興味があったので、質問しています)