I - разделение интерфейсов
Вопрос
Принцип разделения интерфейсов - что это и где виден во фронтенде?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
клиента нельзя заставлять зависеть от того, чем он не пользуется
лучше несколько узких интерфейсов, чем один толстый
нарушение: компонент на двадцать пропсов, где нужны три
нарушение: один контекст на всё состояние приложения
починка: разбить пропсы по назначению, разнести контексты
в TypeScript - Pick вместо передачи всей сущности
Что могут спросить следом
- Почему передавать всю сущность в пропсы - плохая идея
- Как разбить контекст, чтобы убрать лишние рендеры
- Что такое составной компонент и чем он тут помогает
Разбор
Нельзя заставлять потребителя зависеть от того, чем он не пользуется.
Фронтовое нарушение номер один - «универсальный» компонент на двадцать пропсов: любой его использующий вынужден знать весь API, а автор боится его менять. Номер два - единый контекст приложения: компонент, которому нужна только тема, перерисовывается от смены корзины.
Починка: разнести по назначению - отдельный контекст на тему, на пользователя, на корзину;
разбить мегакомпонент на составной API (Table, Table.Row, Table.Cell).
В типах это тот же принцип: функция должна принимать Pick<User, 'id' | 'name'>,
а не всего User - тогда её легко вызвать и легко протестировать.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.