Получить доступ

Что на самом деле утверждает Single Responsibility Principle?

JuniorПринципы проектирования
Ещё спрашивают так:
  • Что такое SRP?
  • Что означает принцип единственной ответственности?
  • Что такое SOLID?
Коротко

SRP: у модуля одна причина для изменения — он отвечает перед одним актором (группой заинтересованных людей).

  • Речь не о «классе с одним методом», а о том, кто может потребовать правок
  • Нарушение: класс считает зарплату (бухгалтерия) и формирует отчёт (руководство)

А ещё Назовите и остальные буквы SOLID: OCP, LSP, ISP, DIP

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

SRP — первая буква SOLID. Распространённое упрощение «класс делает одну вещь» неточно: класс может содержать много методов и оставаться цельным. Роберт Мартин формулирует принцип через причину изменения: модуль должен отвечать перед одним актором — группой людей, чьи требования его меняют.

Почему это важно: если в одном классе живёт логика для разных заказчиков, правка по просьбе одного ломает поведение для другого. Классический пример — класс Employee с методами calculatePay() (их меняет бухгалтерия), reportHours() (отдел кадров) и save() (администраторы базы). Общий вспомогательный метод, поправленный для бухгалтерии, незаметно изменит отчёт отдела кадров.

Решение — разнести ответственность по разным классам и оставить общий фасад, если нужен.

Остальные принципы SOLID: OCP — открыт для расширения, закрыт для изменения; LSP — наследник должен заменять родителя без нарушения поведения; ISP — много узких интерфейсов лучше одного широкого; DIP — зависеть от абстракций, а не от конкретных реализаций.

Что хотят услышать

  • Формулировка через причину изменения или актора.
  • Почему «один метод» — неверное понимание.
  • Пример нарушения и последствий.
  • Знание остальных принципов SOLID — плюс.

Частые ошибки

  • Читать SRP как «класс должен делать одну вещь» и дробить код до анемичных классов с одним методом.
  • Мерить SRP строками кода вместо количества причин для изменения.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓У класса должна быть одна и только одна причина для изменения
  • ✗В классе должен быть ровно один публичный метод
  • ✗Класс не должен быть длиннее 200 строк
  • ✗Класс должен реализовывать не более одного интерфейса

Что спросят дальше

  • По каким признакам вы находите нарушение SRP в реальном коде?
  • Чем чрезмерное дробление хуже, чем один связный класс?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем