Добрый день я не эксперт в DDD и не понимаю всех тонкостей, подскажите пожалуйста как реализовывается запуск транзакций в Application Service?
Имеется структура:
src-
- Module1
- Application
- BooService
- FooService
- Domain
- Repository
- MyModelRepositoryInterface
- Infrastructure
- ExampleCommand
- Repository
- MyModelRepository
- Module2
- Application
- Domain
- Infrastructure
Запускается выполнение команды \App\Module1\Infrastructure\ExampleCommand
который в свою очередь запускает сервис \App\Module1\Application\BooService
он обращается к репозиторию MyModelRepository и к сервису FooService получает какие то абстрактные данные и потом создаётся объект и сохраняется.
Каким образом реализовывается транзакция в этом сервисе? и вообще возможно ли она тут или нужно как то иначе архитектуру построить?
На ум приходит либо какой то сервис TransactionService на уровне Infrastructure с интерфейсом в Domain или работа через Events.
class BooService
{
public function execute()
{
//Transaction start
$result = $this->fooService->execute();
$this->myModelRepository->add(new MyModel($result->foo, $result->boo));
//Transaction finish
return true;
}
}