In un'applicazione progettata da DDD con principio CQRS come gestiamo il caso quando un comando deve essere convalidato prima di essere eseguito su un aggregato e la convalida deve interrogare i dati esistenti?
Ad esempio, nel mio sistema ho Customer
, Project
e Ticket
aggregati. Un Project
appartiene a uno specifico Customer
e un Ticket
è aperto per uno specifico Project
.
Un comando CreateTicket
viene emesso dal cliente corrente. Il sistema popola il carico utile del comando con customer_id
e project_id
.
Prima che i comandi vengano eseguiti su Ticket
aggregato, devo verificare che il progetto del comando appartenga effettivamente al cliente del comando.
Un altro caso è questo. Viene emesso un comando per creare un nuovo Department
nel sistema. Un dipartimento ha una proprietà title
. Prima che venga creato il dipartimento, devo verificare che non ci siano altri reparti con lo stesso titolo nel sistema. Il repository aggregato non esegue query sui dati. Si recupera solo per ID e memorizza gli aggregati.
Come gestiamo tali casi?