PHP Enums для доменных правил
Как использовать Enums в PHP для надёжных доменных состояний и уменьшения ошибок на переходах статусов.
String-статусы в коде почти всегда приводят к ошибкам: опечатки, недопустимые переходы, «магические» значения.
Проще говоря
Как использовать Enums в PHP для надёжных доменных состояний и уменьшения ошибок на переходах статусов. Ниже — что именно делать на практике и где чаще всего ошибаются.
Что дают Enums
- ограниченный набор валидных состояний,
- явные переходы между статусами,
- меньше условного мусора в сервисах.
Реальная ситуация
Коротко про вводные.
Контекст: В модуле заявок переходы статусов хранились строками. После перехода на Enum + методы canTransitionTo() количество багов на workflow заметно снизилось.
Минимальный подход
- enum для статусов,
- policy-метод для переходов,
- тесты на запрещённые переходы.
Короткая история из команды
Ключевой сдвиг произошёл, когда решение начали проверять по метрикам после каждого релиза, а не обсуждать только на уровне идей.
Вывод
Enums — простой шаг, который делает доменные правила проверяемыми и устойчивыми.
Где Enums особенно помогают в команде
Enums снижают количество скрытых договорённостей: IDE подсказывает допустимые состояния, а переходы становятся явными в коде. Это особенно важно, когда в проект быстро входят новые разработчики.
В связке с unit-тестами на переходы статусов Enums заметно уменьшают регрессии на workflow-логике.
Мини-план внедрения без перегруза
Неделя 1: выбрать один модуль и описать текущую проблему на языке фактов. Неделя 2: внедрить решение в ограниченном контуре и добавить базовые тесты/проверки. Неделя 3: проверить эффект и оформить правило в командный стандарт.
Если подход сработал, масштабируй его на соседние участки. Если нет — зафиксируй, почему гипотеза не подтвердилась. Такой цикл экономит время и делает архитектуру практичной, а не декларативной.