← Назад к блогу
PHP 28.05.2024·2 мин чтения

PHP Enums для доменных правил

Как использовать Enums в PHP для надёжных доменных состояний и уменьшения ошибок на переходах статусов.

String-статусы в коде почти всегда приводят к ошибкам: опечатки, недопустимые переходы, «магические» значения.

Проще говоря

Как использовать Enums в PHP для надёжных доменных состояний и уменьшения ошибок на переходах статусов. Ниже — что именно делать на практике и где чаще всего ошибаются.

Что дают Enums

  • ограниченный набор валидных состояний,
  • явные переходы между статусами,
  • меньше условного мусора в сервисах.

Реальная ситуация

Коротко про вводные.

Контекст: В модуле заявок переходы статусов хранились строками. После перехода на Enum + методы canTransitionTo() количество багов на workflow заметно снизилось.

Минимальный подход

  • enum для статусов,
  • policy-метод для переходов,
  • тесты на запрещённые переходы.

Короткая история из команды

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

Вывод

Enums — простой шаг, который делает доменные правила проверяемыми и устойчивыми.

Где Enums особенно помогают в команде

Enums снижают количество скрытых договорённостей: IDE подсказывает допустимые состояния, а переходы становятся явными в коде. Это особенно важно, когда в проект быстро входят новые разработчики.

В связке с unit-тестами на переходы статусов Enums заметно уменьшают регрессии на workflow-логике.

Мини-план внедрения без перегруза

Неделя 1: выбрать один модуль и описать текущую проблему на языке фактов. Неделя 2: внедрить решение в ограниченном контуре и добавить базовые тесты/проверки. Неделя 3: проверить эффект и оформить правило в командный стандарт.

Если подход сработал, масштабируй его на соседние участки. Если нет — зафиксируй, почему гипотеза не подтвердилась. Такой цикл экономит время и делает архитектуру практичной, а не декларативной.