Поддержите проект, сделав пожертвование

Спасибо за интересный фидбек!

Согласен, что по сути Action в примерах действительно напоминает либо метод репозитория, либо атомарный сервис — в основном из-за своей ответственности "создать пользователя" (или выполнить аналогичное простое действие), но в статье указаны лишь примеры и Action это не всегда работа именно с базой, Action то именно дейтвие, а какое действие это уже на откуп разработчику. Главное отличие — в явной декларативности и возможности гибко дополнять Action дополнительным поведением (транзакции, кеширование, события и т.д.), минуя избыточную обвязку.

По поводу риска "напихать бизнес-логику" — да, такой соблазн есть, но это уже вопрос архитектурной дисциплины. Концепция как раз в том, чтобы Action был атомарным, а любые сценарии с несколькими шагами и логикой собирались только в UseCase.

В репозиторий обычно не помещают даже базовую логику, его задача — исключительно взаимодействие с источником данных, что и ограничивает возможности "напихивания", не говоря об его избыточности при работе с Eloquent ORM, ведь AR уже предоставляет все возможности доступные для репозитория, начиная от заготовок и заканчивая сменой хранилища на любое доступное. UseCase — идеальное место для оркестрации операций (в том числе и Actions разных типов). Этот подход как раз и нужен был, чтобы агрегировать как бы сценарии которые имеют логический набор данных на входе и декларированный результат на выходе с участием атомарных действий.

Про версионность UseCase — хорошая идея! Такой подход решает своего рода вопрос backward compatibility в сценариях, и это реально может быть удобным. На данный момент версионность в моем случае описывается через контейнер, путем подмены на нужню реализацию в нужных версиях того же API.

Отдельно рад, что статья вызвала раздумья и новые идеи — для меня это основной критерий пользы.

Рассматривал такой алгоритм на первой версии бота на laravel, но для телеграмм бота который добавляют в чаты, после 50 чата laravel уже немного выходил из изначально запланированных ресурсов. В итоге перенес бота на TS, а борьбу со спамом на сигнатуры, собрал небольшую базу которой сейчас хватает, чтобы отсекать некоторое колличество спама в нескольких группах.

Спам неплохо классифицирует ollama, но ресурсов она требует конечно ))