Ho trovato DDD essere naturale se sto lavorando su un tipo operativo/transazionale di applicazione. Tuttavia, sono sempre bloccato in un modo ragionevole per gestire il tipo di segnalazione delle funzioni.In che modo Domain Driven Design gestisce i report?
La segnalazione di cui sto parlando su non è tenuto a segnalare generazione, ma anche le funzioni che eseguono le query relativamente complesse. (ad esempio, fornire il riepilogo di tutti gli ordini effettuati da un operatore commerciale o visualizzare il riepilogo dell'account per gli account di trading con determinati stock, ecc.). Possono essere semplicemente alcune query o funzioni di supporto utilizzate insieme a quelle funzioni operative.
Per tali funzioni, è del tutto naturale, se siamo in grado di eseguire join in SQL (o qualunque linguaggio di query), ottenere le colonne che ci interessano, e restituire il set di risultati massaggiato. Tuttavia, sembra che non vada così bene con DDD: abbiamo bisogno di un repository speciale in più o di avere un repository più correlato che restituisca uno speciale "oggetto entità/valore" (che è il set di risultati specializzato). Questo tipo di "entità" speciali non ha infatti alcun significato di dominio.
Se si desidera utilizzare il livello di dominio significativo, questo potrebbe creare molte ricerche aggiuntive da repository diversi, oltre a un sacco di lavoro di aggregazione nel dominio o livello di servizio, che facilmente causerà un degrado delle prestazioni orribile.
Ho anche pensato di avere un altro "percorso" per questo tipo di funzione, che non passa attraverso il "percorso DDD", avendo il suo modo di ottenere i dati del report dal DB, comporre i risultati per la visualizzazione. Tuttavia renderà l'applicazione inutilmente complicata, e ancora peggio, abbiamo fornito un percorso extra in modo che gli sviluppatori che sono più abituati allo sviluppo tradizionale orientato al DB possano tendere a utilizzare questo percorso anche se non è appropriato.
ho pensato tale situazione è abbastanza comune (di solito un grande sistema non contiene operativo, ma anche la segnalazione e le funzioni di indagine), vorrei sapere come la gente ne occupa?
Onestamente è difficile decidere quale sia corretto ma usare CQRS sembra più ragionevole (e questa è la risposta più convincente che ricevo anche da domaindrivendesign.org) –