Ответ вслух Middle SOLID и принципы обновлено

O - открыт для расширения

Вопрос

Принцип открытости/закрытости - что это и как выглядит во фронтенде?

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

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

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

Коротко

Принцип: модуль открыт для расширения и закрыт для изменения - добавляя поведение, мы дописываем код, а не переписываем работающий. Симптом нарушения во фронтенде - компонент, у которого копятся булевы пропсы: isCompact, withIcon, asLink, variantSecondary, и внутри лестница if.

Что должно прозвучать в ответе

  • новое поведение добавляется новым кодом, старый не правим

  • нарушение: растущая цепочка if по типу или варианту

  • во фронтенде расширение - это children, слоты и render-props

  • вместо нового булева пропса - новая композиция

  • реестр компонентов по типу вместо switch

  • цена: преждевременная абстракция дороже пары if

Что могут спросить следом

  • Когда switch по типу - нормально, а когда пора в реестр
  • Чем композиция лучше булевых пропсов
  • Как это выглядит в дизайн-системе

Разбор

Принцип: модуль открыт для расширения и закрыт для изменения - добавляя поведение, мы дописываем код, а не переписываем работающий.

Симптом нарушения во фронтенде - компонент, у которого копятся булевы пропсы: isCompact, withIcon, asLink, variantSecondary, и внутри лестница if. Каждый новый случай требует править общий компонент и рискует сломать существующие.

Расширение делается композицией: children, именованные слоты, render-props. Или реестром: const RENDERERS = { text: TextCell, money: MoneyCell } - новый тип добавляется записью в объект, а не веткой в switch.

Но и без фанатизма: два if дешевле и понятнее, чем фабрика ради двух случаев. Абстракцию вводят на третьем повторении, а не на первом.

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

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