Позвольте мне немного обойти. ТВЕРДЫЕ принципы хороши. Но поймите, что в какой-то момент принципы рушатся, факт, который признает даже создатель термина SOLID. Да, вы хотите следовать одиночной ответственности, открывать / закрывать и т. Д., Но когда вы делаете это, что-то должно знать, как создавать все те вещи, которые в противном случае красиво отделены от одной ответственности.
Подумайте об одной из вещей, которую сказал дядя Боб, если и переключатся в вашем коде. "Имейте это точно один раз." Само собой разумеется, что длинный if
или switch
действительно будет нарушением SRP и OCP. И это нормально, , если у вас есть это нарушение один раз.
Итак, держите ваш
if (a)
return x;
else if (b)
return y;
else if (c)
return z;
else
throw new InvalidOperationException();
И получите его один раз. Да, это нарушение OCP. Да, это может нарушить SRP. Но что-то где-то должно. Ключ заключается в уменьшении количества этих чего-то и тех, кто-то.