Что на самом деле утверждает Single Responsibility Principle?
- Что такое SRP?
- Что означает принцип единственной ответственности?
- Что такое SOLID?
SRP: у модуля одна причина для изменения — он отвечает перед одним актором (группой заинтересованных людей).
- Речь не о «классе с одним методом», а о том, кто может потребовать правок
- Нарушение: класс считает зарплату (бухгалтерия) и формирует отчёт (руководство)
А ещё Назовите и остальные буквы SOLID: OCP, LSP, ISP, DIP
Подробно
SRP — первая буква SOLID. Распространённое упрощение «класс делает одну вещь» неточно: класс может содержать много методов и оставаться цельным. Роберт Мартин формулирует принцип через причину изменения: модуль должен отвечать перед одним актором — группой людей, чьи требования его меняют.
Почему это важно: если в одном классе живёт логика для разных заказчиков, правка по просьбе одного ломает поведение для другого. Классический пример — класс Employee с методами calculatePay() (их меняет бухгалтерия), reportHours() (отдел кадров) и save() (администраторы базы). Общий вспомогательный метод, поправленный для бухгалтерии, незаметно изменит отчёт отдела кадров.
Решение — разнести ответственность по разным классам и оставить общий фасад, если нужен.
Остальные принципы SOLID: OCP — открыт для расширения, закрыт для изменения; LSP — наследник должен заменять родителя без нарушения поведения; ISP — много узких интерфейсов лучше одного широкого; DIP — зависеть от абстракций, а не от конкретных реализаций.
Что хотят услышать
- Формулировка через причину изменения или актора.
- Почему «один метод» — неверное понимание.
- Пример нарушения и последствий.
- Знание остальных принципов SOLID — плюс.
Частые ошибки
- Читать SRP как «класс должен делать одну вещь» и дробить код до анемичных классов с одним методом.
- Мерить SRP строками кода вместо количества причин для изменения.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓У класса должна быть одна причина для изменения
- ✗Класс должен реализовывать не более одного интерфейса
- ✗В классе должен быть ровно один публичный метод, не считая конструктора
- ✗Класс не должен быть длиннее 200 строк вместе с импортами
Что спросят дальше
- По каким признакам вы находите нарушение SRP в реальном коде?
- Чем чрезмерное дробление хуже, чем один связный класс?
Разбор темы
- SOLID: пять принципов дизайна
SRP, OCP, LSP, ISP, DIP — что каждая буква значит на самом деле, как выглядит нарушение в Java-коде, чем DIP отличается от DI и IoC.
Связанные вопросы
- В коде расчёта комиссии есть метод с цепочкой if по типу платежа, и при добавлении каждого нового способа оплаты приходится править этот метод и ещё три похожих. Какой принцип SOLID нарушен в первую очередь? Middle
- Что такое Liskov Substitution Principle и что обязан соблюдать подтип? Middle
- Сервис получает через конструктор зависимость типа PostgresOrderRepository (конкретный класс), которую внедряет Spring. Что здесь верно? Middle
- Что утверждает Interface Segregation Principle? Middle
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.