Ho cercato e letto recentemente su DDD e, finora, penso di averne compreso le basi.
Se ho capito bene, l'architettura è simile a questa:
Database <--SQL--> DAO/ORM <--CRUD--> Repository/Aggreagtes <--Business--> **¿?** <-- Controller --> Internet/Client/UI
Il mio dubbio gira attorno al divario ¿? . Di solito lo riempiono di servizi.
I miei servizi spesso sono la prima prova di un modello di dominio anemico , perché tutta la logica aziendale è a questi servizi (e le loro implementazioni sono abbastanza procedurali). Di conseguenza il mio modello di dominio è un semplice set di POJO.
La mia intenzione è di spostare gradualmente il mio attuale progetto verso un modello di dominio più ricco e un livello di servizio più sottile. Tuttavia, sono preoccupato per la transazione e il livello a cui appartiene.
Cercando come compilare il gap precedente, ho trovato questa domanda
Seguendo il link e la risposta verificata presumo che:
-
Ci sono ancora dei servizi in DDD. Questi servizi eseguono operazioni di business tramite repository (e root aggregati).
-
I servizi sono pensati per coprire le esigenze aziendali che non possono essere coperte attraverso root e / o repository agreggati.
-
I servizi eseguono transazioni commerciali tramite componenti UnitOfWork (UoW) . Una UoW potrebbe coinvolgere uno o più root e repository aggregati.
Domanda: È questo il modo di implementare il livello aziendale e la transazionalità in DDD? (App Service - > UoW - > Repository)
Se sì
[domanda bonus]: In che modo gli eventi e i gestori dell'applicazione si adattano a tale architettura? I servizi sono tradotti in gestori? (Gestore - > UoW - > Repository)?
Sono grato per qualsiasi tipo di input. Mi sento un po 'confuso con il modo in cui i livelli di ddd sono legati o come legarli con il minor accoppiamento possibile.