As transações principalmente em ORM mais maduras, seguem o mesmo protocolo e implementações parecidas. Agora voce falando de DDD, voce pode utilizar tanto no Laravel ou Express as transactions na sua camada de repository infra/repository/meu-banco
.
Caso voce precisar criar uma transação que afete mais de uma tabela por exemplo: CreateUserRepository
e CreateUserGroupRepository
é acho melhor seguir o conceito de responsabilidade única e também a regra do seu projeto. Se o seu usuário precisa de um grupo para existir, voce pode dentro do CreateUserRepository
já criar a transação dentro dele.
Caso voce queira abstrair a transação para outra camada, na aplication ou main
eu acho over, por que a transação só deveria existir na camanda de repository