Leyendo la literatura de DDD se me ocurrieron las siguientes capas:
Application
Outsider World (Controladores, Crons, etc.)Application Services
(o UseCases), que organiza múltiples servicios de dominio o servicios de infraestructura. Son llamados deOutside World
. Ellos saben que cosas hay que hacerDomain Services
- que contiene cómo se hacen las cosas (confiando en las interfaces del repositorio)
Pregunta : ¿Existe alguna práctica recomendada para comunicarse entre capas?
Lo que sé: Application services
debería devolver los "datos deseados" para exponerlos y parte del "éxito" de la transacción (advertencias, errores, informaciones). Los datos que Application Service
devuelve deben recopilarse Domain Services
y / o Infrastructure Services
compilarse juntos.
Controller <-> Application Service <-> Domain Service
<-> Infrastructure Service
Estos son algunos de mis pensamientos ambiguos:
¿Todos los métodos
Application Service
deben tener un DTO específico que contenga la "solicitud" como parámetro? Me gustaAddItemToCardCommandDto
(que encapsula todos los datos necesarios). ¿Qué tal un genéricoResultObject
que solo tiene un par de métodos comogetResult
yhasErrorrs
ogetMessages
?¿Cómo se deben devolver los
DomainService
datos y los errores? ¿Deberían devolver errores por excepción? Eso parece extraño porque para mí la validaciónDomainServices
de negocios debería llamarse ya que son parte de las reglas comerciales.
fuente