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

I - разделение интерфейсов

Вопрос

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

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

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

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

Коротко

Нельзя заставлять потребителя зависеть от того, чем он не пользуется. Фронтовое нарушение номер один - «универсальный» компонент на двадцать пропсов: любой его использующий вынужден знать весь API, а автор боится его менять.

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

  • клиента нельзя заставлять зависеть от того, чем он не пользуется

  • лучше несколько узких интерфейсов, чем один толстый

  • нарушение: компонент на двадцать пропсов, где нужны три

  • нарушение: один контекст на всё состояние приложения

  • починка: разбить пропсы по назначению, разнести контексты

  • в TypeScript - Pick вместо передачи всей сущности

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

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

Разбор

Нельзя заставлять потребителя зависеть от того, чем он не пользуется.

Фронтовое нарушение номер один - «универсальный» компонент на двадцать пропсов: любой его использующий вынужден знать весь API, а автор боится его менять. Номер два - единый контекст приложения: компонент, которому нужна только тема, перерисовывается от смены корзины.

Починка: разнести по назначению - отдельный контекст на тему, на пользователя, на корзину; разбить мегакомпонент на составной API (Table, Table.Row, Table.Cell).

В типах это тот же принцип: функция должна принимать Pick<User, 'id' | 'name'>, а не всего User - тогда её легко вызвать и легко протестировать.

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

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