Выбор ответа Middle SOLID и принципы обновлено
Open/Closed на примере switch
Вопрос
Каждый новый тип уведомления заставляет править функцию renderNotice со switch. Какое изменение лучше всего соответствует принципу открытости/закрытости?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Словарь «тип → компонент», новые типы новой записью. OCP: новое поведение добавляем новым кодом, не меняя существующий.
Варианты ответа
- Добавить в
switchветкуdefault, которая рендерит текст - Переписать
switchна цепочкуif/elseпо типу - Вынести
renderNoticeв отдельный файл модуля - Словарь «тип → компонент», новые типы новой записьюправильный ответ
Разбор
OCP: новое поведение добавляем новым кодом, не меняя существующий. Словарь или реестр рендереров позволяет добавить тип, не трогая функцию выбора. Ветка default лишь маскирует отсутствие поддержки. if/else это тот же switch с той же проблемой. Перенос в другой файл ничего не меняет в том, как добавляется новый тип.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.