Lendo a literatura do DDD, criei as seguintes camadas:
ApplicationOutsider 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 servicesdeve retornar "dados desejados" a serem expostos e alguns dos "sucessos" da transação (avisos, erros, informações) - Os dados Application Serviceretornados por uma empresa devem ser coletados Domain Servicese / ou Infrastructure Servicescompilados.
Controller <-> Application Service <-> Domain Service
<-> Infrastructure Service
Estes são alguns dos meus pensamentos ambíguos:
Todos os métodos
Application Servicedevem 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éricoResultObjectque tenha apenas alguns métodos comogetResultehasErrorrsougetMessages?Como deve retornar
DomainServicedados e erros? Eles devem retornar erros por exceção? Isso parece estranho, porque para mim a ValidaçãoDomainServicesde Negócios deve ser chamada , pois faz parte das regras de negócios.