~ TLDR: Sto implementando una soluzione CQRS + DDD per uno dei miei progetti più grandi e, mi chiedo se ci sia un motivo reale per cui i miei gestori di comandi non possono inviare direttamente il comando obietta ai miei aggregati, in una manciata di casi, in cui l'oggetto comando è ricco di dati? Non riesco a trovare alcun motivo specifico per cui questo sarebbe un qualsiasi tipo di anti-modello, e non riesco a trovare alcuna opinione che vada nei dettagli di questo tipo di design.Passare i comandi CQRS direttamente agli oggetti Dominio
Background: I sistemi CQRS sono stati implementati in precedenza e ho implementato le applicazioni DDD, ma mai CQRS + DDD in una corretta applicazione basata su domini di stile Eric Evans. Quindi chiedo perché non voglio abusare dei miei Aggregati e danneggiare la mia domanda a lungo termine.
Un esempio del mio oggetto comando che ha un bel po 'di dati sarebbe un comando di registrazione che accetta più di 8 campi (nome, cognome, nome preferito, dob, titolo, nome utente, password, reparto ecc.). Sembra molto imbarazzante creare un metodo sul mio Aggregate che abbia 8 parametri, e la soluzione alternativa di usare una sorta di dto, e avere il mio gestore mappare il comando al dto - automagicamente usando automapper, o inline - sembra un inutile e non valore aggiungendo astrazione.
Posso anche vedere casi di utilizzo futuri in cui i comandi potrebbero essere ricchi di dati (non sarebbe una grande percentuale di comandi, ma ce ne sarebbero ancora alcuni), quindi mi piacerebbe ottenere questo aspetto apparentemente banale corretto dall'inizio.
Per quanto mi ricordo, DDD non dice esattamente come implementare il modello di dominio ma CQRS lo fa. Nessun conflitto qui. Per quanto riguarda gli oggetti di comando semplici, come li hai passati ad Aggregati? Immagino tu abbia un'astrazione/un'interfaccia da cui entrambi dipendono. – neleus
Ho passato i dati di comando (non l'oggetto comando effettivo) all'aggregato tramite parametri. Il comando viene ricevuto da un gestore che carica l'aggregato e passa semplicemente ciò di cui ha bisogno tramite un metodo progettato in modo appropriato. Normalmente è solo uno o pochi parametri, che è il modo in cui mi piace, perché credo che un aggregato ben progettato dovrebbe avere metodi che richiedono pochissimi parametri. Altrimenti probabilmente sta violando SRP in qualche modo. Ma ci sono * alcuni casi limite in cui possono essere richiesti molti parametri. – AaronHS
Hai considerato di passare l'intero oggetto comando ad Aggregate? Sembra semplice, senza problemi qui. – neleus