Leggendo la letteratura di DDD ho trovato i seguenti livelli:
-
ApplicationMondo 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 Servicehanno un DTO specifico che contiene la "richiesta" come parametro? ComeAddItemToCardCommandDto(che racchiudeva tutti i dati necessari). Che ne dici di un genericoResultObjectche ha solo un paio di metodi comegetResultehasErrorrsogetMessages? -
Come devono restituire
DomainServicedati ed errori? Dovrebbero restituire errori per eccezione? Sembra strano perché per me la convalida dei bussines deve essere chiamata inDomainServicesin quanto fanno parte delle regole aziendali.