これは設計上の問題です。より具体的には、これを行うより良い方法があるかどうか疑問に思っていました。基本的には、さまざまな種類の休暇(有料、未払いなど)がさまざまな企業で計算できる電卓の実装では、 を実装しています。各企業は、四捨五入、日/日などのような独自のひねりを持つ傾向があります。さまざまなコンセプトを持つこのファクトリクラスのデザインを改善するにはどうすればよいですか?
計算機は異なるコードにバインドされており、特定の企業にバインドされています(コードA
はFirmOne
) - 私のデザインではありませんが、私はこれらを尊重しなければなりません。
簡略化した例:実際に
internal class CalculatorFactory
{
internal ICalculator Create(string calculatorCode)
{
ICalculator result;
switch (calculatorCode)
{
case FirmOne.CalculatorCodes.A:
case FirmTwo.CalculatorCodes.B:
result = new FastCalculator();
break;
case FirmOne.CalculatorCodes.X:
case FirmTwo.CalculatorCodes.Y:
result = new SlowCalculator();
break;
case FirmThree.CalculatorCodes.Z:
result = new VerySlowCalculator();
break;
default:
throw new NotSupportedException();
}
return result;
}
}
internal interface ICalculator
{
decimal Calculate();
}
がしっかりあたりダース異なる計算程度であるので、私は工場上記 に作成ロジックを抽出する代わりに、あらゆる場所にスイッチケースでコードを散らかすのクラス。近い将来にもっと多くの計算機が追加される可能性があることを念頭に置いて、この設計を改善する方法を提案する人はいますか?
特に文字列として渡されたコードが好きではないので、最初の改善点は列挙型にすることができますが、それ以外は..?おそらく会社ごとに別々の工場を作るのですか?
ありがとうございます!
なぜコードレビューコミュニティでこの質問をしませんでしたか? – Badiparmagi
これは、コードよりもパターンに関するコードレビューではなく、ソフトウェアエンジニアリングに適しています。 – toadflakz
私はソフトウェアエンジニアリングSEに移行する必要があるので、この質問を議論の対象外とすることに投票しました。質問はパターンではなくコードであるため、Code Review SEへの移行を提案していません。 – toadflakz