
Чеклист SRP — проверка сервисов
Этот чеклист используется для проверки сервисов и помогает убедиться, что каждый сервис выполняет одну понятную задачу.
Он помогает вовремя заметить, когда сервис разрастается, смешивает разные обязанности или начинает контролировать слишком много логики.
«И» в описании
❌ Не надо
«Сервис считает цену билета и применяет агентские скидки»
✅ Надо
«Сервис считает цену билета»
Много причин для изменения
❌ Не надо
Сервис меняется, если:
- меняются правила ценообразования
- меняется логика агентов
- меняется структура БД
✅ Надо
Сервис меняется только при изменении логики ценообразования.
Слишком много зависимостей
❌ Не надо
__construct(
EventRepository,
AgentRepository,
PriceTypeRepository,
Logger,
Cache
)
✅ Надо
__construct(
PriceCalculator
)
Прямое использование ORM
❌ Не надо
Сервис сам делает запросы к БД и одновременно решает бизнес-задачу.
✅ Надо
Сервис получает готовые данные и только считает результат.
Много доменных понятий
❌ Не надо
Сервис знает про:
- события
- билеты
- агентов
- типы цен
- скидки
✅ Надо
Сервис знает минимальный набор, нужный для своей задачи.
Внутреннее состояние
❌ Не надо
$this->event = $event;
Сервис запоминает данные между вызовами.
✅ Надо
Все данные передаются через аргументы методов.
Ошибки как возвращаемые значения
❌ Не надо
Метод возвращает «результат или ошибку».
✅ Надо
Метод либо возвращает результат, либо явно падает.
Валидация + логика + сохранение
❌ Не надо
Один класс:
- проверяет данные
- считает бизнес-правила
- сохраняет в БД
✅ Надо
- валидация — отдельно
- бизнес-логика — в сервисе
- сохранение — в репозитории