n 型のデータを受け取り、データの計算に基づいて値を返す Calculator クラスがあります。Main クラスでデータを生成していますが、Calculator クラスの設計方法について 2 つのオプションに直面しています。
最初のオプション:
public class Main
{
Dictionary<DataType, Calculator> dataTypeToCalculator = new Dictionary<DataType, Calculator>()
void RecordResult(Data data)
{
Calculator calculator = dataTypeToCalculator[data.DataType]; //assume this exists
int result = calculator.Calculate(data);
StoreResult(result); //pretend this is implemented, it stores the result somewhere in Main object
}
}
public class Calculator
{
int field1 = 1;
int field2 = 2;
int Calculate(Data data)
{
return data.Value + field1 + field2;
}
}
2 番目のオプション:
public class Main
{
Calculator calculator = new Calculator();
void RecordResult(Data data)
{
calculator.Calculate(data);
}
}
public class Calculator
{
Dictionary<DataType, int> dataTypeToField1 = new Dictionary<DataType, int>();
Dictionary<DataType, int> dataTypeToField2 = new Dictionary<DataType, int>();
void Calculate(Data data)
{
int field1 = dataTypeToField1[data.DataType];
int field2 = dataTypeToField2[data.DataType];
return data.Value + field1 + field2;
}
}
内部フィールドを持たないいくつかのクリーンなクラスがあり、インスタンスを 1 つ持つことができ、Main クラスから Data を渡すだけで、さまざまな DataTypes を処理できます。ただし、複数の必要なフィールドを持つ他のクラスがあり、それぞれの内部辞書を作成するのは悪いようです。この種の状況に対する標準的な「ベスト プラクティス」はありますか? この例では、Calculator がすべての計算タスクをカプセル化し、Main クラスに依存してデータを分離する必要がないようにしたいと考えています。ただし、クラスに多くのフィールドがある場合、これは私には正しくないようです。