Выбор ответа Middle SOLID и принципы обновлено

Open/Closed на примере switch

Вопрос

Каждый новый тип уведомления заставляет править функцию renderNotice со switch. Какое изменение лучше всего соответствует принципу открытости/закрытости?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Словарь «тип → компонент», новые типы новой записью. OCP: новое поведение добавляем новым кодом, не меняя существующий.

Варианты ответа

  1. Добавить в switch ветку default, которая рендерит текст
  2. Переписать switch на цепочку if/else по типу
  3. Вынести renderNotice в отдельный файл модуля
  4. Словарь «тип → компонент», новые типы новой записьюправильный ответ

Разбор

OCP: новое поведение добавляем новым кодом, не меняя существующий. Словарь или реестр рендереров позволяет добавить тип, не трогая функцию выбора. Ветка default лишь маскирует отсутствие поддержки. if/else это тот же switch с той же проблемой. Перенос в другой файл ничего не меняет в том, как добавляется новый тип.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.