главная/Чеклист SRP — проверка сервисов
SRP чеклист

Чеклист SRP — проверка сервисов

Этот чеклист используется для проверки сервисов и помогает убедиться, что каждый сервис выполняет одну понятную задачу.
Он помогает вовремя заметить, когда сервис разрастается, смешивает разные обязанности или начинает контролировать слишком много логики.

«И» в описании

❌ Не надо

«Сервис считает цену билета и применяет агентские скидки»

✅ Надо

«Сервис считает цену билета»

Много причин для изменения

❌ Не надо
Сервис меняется, если:

  • меняются правила ценообразования
  • меняется логика агентов
  • меняется структура БД

✅ Надо
Сервис меняется только при изменении логики ценообразования.

Слишком много зависимостей

❌ Не надо

__construct(
    EventRepository,
    AgentRepository,
    PriceTypeRepository,
    Logger,
    Cache
)

✅ Надо

__construct(
    PriceCalculator
)

Прямое использование ORM

❌ Не надо
Сервис сам делает запросы к БД и одновременно решает бизнес-задачу.

✅ Надо
Сервис получает готовые данные и только считает результат.

Много доменных понятий

❌ Не надо
Сервис знает про:

  • события
  • билеты
  • агентов
  • типы цен
  • скидки

✅ Надо
Сервис знает минимальный набор, нужный для своей задачи.

Внутреннее состояние

❌ Не надо

$this->event = $event;

Сервис запоминает данные между вызовами.

✅ Надо
Все данные передаются через аргументы методов.

Ошибки как возвращаемые значения

❌ Не надо
Метод возвращает «результат или ошибку».

✅ Надо
Метод либо возвращает результат, либо явно падает.

Валидация + логика + сохранение

❌ Не надо
Один класс:

  • проверяет данные
  • считает бизнес-правила
  • сохраняет в БД

✅ Надо

  • валидация — отдельно
  • бизнес-логика — в сервисе
  • сохранение — в репозитории