Выбор ответа Middle SOLID и принципы обновлено

Interface Segregation в пропсах

Вопрос

Компонент <Avatar user={user} /> использует только user.avatarUrl и user.name, а получает весь объект пользователя из стора (30 полей). Какой принцип это нарушает в первую очередь и какое следствие самое заметное?

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

Выберите вариант, и откроется разбор.

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

Коротко

Правильный ответ: ISP: компонент зависит от лишнего и перерисовывается от чужих полей. ISP говорит не зависеть от того, чем не пользуешься.

Варианты ответа

  1. ISP: компонент зависит от лишнего и перерисовывается от чужих полейправильный ответ
  2. OCP: компонент нельзя расширить без изменения его исходного кода
  3. DRY: поля пользователя продублированы в пропсах и в сторе
  4. LSP: объект пользователя нельзя подставить вместо другого объекта

Разбор

ISP говорит не зависеть от того, чем не пользуешься. Если передавать весь user, любое изменение любого поля (например, баланса) создаёт новый объект и перерисует аватар, а в тестах придётся собирать полный объект. Лучше передать src и name. OCP про добавление поведения, DRY про дублирование знания, LSP про подстановку реализаций: к ситуации они не относятся.

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

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