Leggendo la letteratura di DDD ho trovato i seguenti livelli:
-
Application
Mondo Outsider (Controllers, Crons, ecc.) -
Application Services
(o UseCases) - che orchestra più servizi di dominio o servizi di infrastruttura. Sono chiamati daOutside World
. Sanno cosa devono essere fatte le cose -
Domain Services
- che contiene come sono fatte le cose (affidandosi alle interfacce del repository)
Domanda : esistono delle best practice su come comunicare tra i livelli?
Quello che so:
- Application services
deve restituire "i dati desiderati" da mostrare e alcuni "successi" della transazione (avvertenze, errore, informazioni)
- I dati restituiti da Application Service
devono essere raccolti da Domain Services
e / o Infrastructure Services
e composti da togather.
Controller <-> Application Service <-> Domain Service
<-> Infrastructure Service
Questi sono alcuni dei miei pensieri ambigui:
-
tutti i metodi su
Application Service
hanno un DTO specifico che contiene la "richiesta" come parametro? ComeAddItemToCardCommandDto
(che racchiudeva tutti i dati necessari). Che ne dici di un genericoResultObject
che ha solo un paio di metodi comegetResult
ehasErrorrs
ogetMessages
? -
Come devono restituire
DomainService
dati ed errori? Dovrebbero restituire errori per eccezione? Sembra strano perché per me la convalida dei bussines deve essere chiamata inDomainServices
in quanto fanno parte delle regole aziendali.