Получить доступ

В коде расчёта комиссии есть метод с цепочкой if по типу платежа, и при добавлении каждого нового способа оплаты приходится править этот метод и ещё три похожих. Какой принцип SOLID нарушен в первую очередь?

MiddleПринципы проектирования
Коротко

Open/Closed Principle: новое поведение требует правки существующего кода, а не добавления нового. Растущая цепочка if или switch по типу, повторённая в нескольких местах, — канонический признак.

  • Лечение: интерфейс FeePolicy и реализация на каждый способ оплаты
  • Выбор реализации — Map<Type, FeePolicy> или List<FeePolicy> из Spring
  • Новый способ оплаты = новый класс, старый код не трогается

А ещё Один switch в фабрике допустим; плохо, когда он размножен по коду

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Растущий switch/if-else по типу — канонический признак нарушения OCP. Чинится полиморфизмом: интерфейс FeePolicy и по реализации на способ оплаты, выбор через Map или через внедрение List<FeePolicy> в Spring. Тогда новый способ оплаты — это новый бин, а старый код не трогается.

Что хотят услышать

  • Принцип и признак нарушения.
  • Решение через полиморфизм.

Частые ошибки

  • Считать, что OCP запрещает править код вообще: закрываются от конкретной, уже проявившейся оси изменений.
  • Выделять абстракцию на первом же варианте — до второго-третьего это спекулятивная общность.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Open/Closed Principle
  • ✗Liskov Substitution Principle
  • ✗Interface Segregation Principle
  • ✗Single Responsibility Principle

Что спросят дальше

  • Как sealed-иерархии из Java 17 сознательно меняют этот trade-off?
  • Как OCP выглядит идиоматично в Spring?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем