Lendo a literatura do DDD, criei as seguintes camadas:
Application
Outsider World (Controladores, Crons, etc)Application Services
(ou UseCases) - que orquestra vários serviços de domínio ou serviços de infraestrutura. Eles são chamados deOutside World
. Eles sabem o que as coisas precisam ser feitasDomain Services
- que contém como as coisas são feitas (contando com as interfaces do repositório)
Pergunta : Existem práticas recomendadas de comunicação entre camadas?
O que eu sei: - Application services
deve retornar "dados desejados" a serem expostos e alguns dos "sucessos" da transação (avisos, erros, informações) - Os dados Application Service
retornados por uma empresa devem ser coletados Domain Services
e / ou Infrastructure Services
compilados.
Controller <-> Application Service <-> Domain Service
<-> Infrastructure Service
Estes são alguns dos meus pensamentos ambíguos:
Todos os métodos
Application Service
devem ter um DTO específico que contenha a "solicitação" como parâmetro? LikeAddItemToCardCommandDto
(que encapsulou todos os dados necessários). Que tal um genéricoResultObject
que tenha apenas alguns métodos comogetResult
ehasErrorrs
ougetMessages
?Como deve retornar
DomainService
dados e erros? Eles devem retornar erros por exceção? Isso parece estranho, porque para mim a ValidaçãoDomainServices
de Negócios deve ser chamada , pois faz parte das regras de negócios.