O - открыт для расширения
Вопрос
Принцип открытости/закрытости - что это и как выглядит во фронтенде?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
новое поведение добавляется новым кодом, старый не правим
нарушение: растущая цепочка 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 ошибок.