Это скорее вопрос дизайна, а более конкретно, мне было интересно, есть ли лучший способ сделать это. В основном я делаю реализацию для калькуляторов, где различные типы отпуска (оплаченные, неоплаченные и т. Д.) Могут быть рассчитаны для разных фирм. Каждая фирма имеет тенденцию иметь свой собственный поворот на них, такой как округление вверх/вниз, больше/меньше дней и т. Д.Как я могу улучшить дизайн этого заводского класса, который имеет множество различных бетонов?
Калькуляторы связаны с разными кодами, которые в свою очередь связаны с конкретными фирмами (например, код 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();
}
В действительности существует около десятка различных калькуляторов на фирму, поэтому вместо того, чтобы засорять код с корпусами переключателей повсюду я извлек логику создания в выше заводе класс. Кто-нибудь имеет предложение о том, как улучшить этот дизайн, имея в виду, что, вероятно, больше калькуляторов будет добавлено в ближайшем будущем ...?
Мне особо не нравится код, переданный в виде строки, поэтому первое улучшение может состоять в том, чтобы сделать его перечислением, но кроме этого ..? Возможно сделать отдельные фабрики на одну фирму.?
Заранее благодарен!
Почему вы не спросили об этом в Сообществе Code Review? – Badiparmagi
Это лучше всего подходит для разработки программного обеспечения, а не для Code Review, поскольку это больше касается шаблона, чем кода. – toadflakz
Я голосую, чтобы закрыть этот вопрос как не относящийся к теме, потому что он должен быть перенесен в Software Engineering SE - вопрос касается шаблона, а не кода, поэтому я не предлагаю его перенести в Code Review SE. – toadflakz