Domanda

Ottengo il concetto generale di CQRS, ma ho alcune domande quando si tratta di andare oltre il codice di esempio e i mazzi di scorrimento che sono là fuori a affrontare i problemi del mondo reale.

  1. Convalida

    Quando è necessario eseguire la convalida di un comando che prevede il controllo dei valori dal database, cosa fai? Prendi la registrazione per un servizio, devo inserire un indirizzo email univoco. Un argomento che ho sentito è che è molto improbabile che l'utente inserisca un indirizzo e -mail duplicato, quindi gestiscilo quando elabora il comando e invia loro un'e -mail che dice "scusa", o forse suggerendo di ripristinare la loro password. Questo processo quindi evita di avere un MODODEL per il bene della convalida. Ma come si affrontano il caso duplicato nel gestore dei comandi? Come fai a sapere che è un duplicato? Controlla un ReadModel? Potresti anche averlo usato in primo luogo per una migliore usabilità.

  2. Modifiche alle funzionalità/fissaggio di bug

    Cosa succede quando devi cambiare il modo in cui funziona un comando o correggere un bug? Nella filosofia per soli append, cosa devo fare con tutti i vecchi comandi e gestori di comandi? Non posso rinominarli a _legacy e nasconderli, altrimenti la deserializzazione del mio evento non funzionerà. Quali eleganti soluzioni ci sono per affrontare questo?

Grazie

È stato utile?

Soluzione

  1. Vedere http://codebetter.com/blogs/gregyoung/archive/2010/08/12/eventual-consistency-and-set-validation.aspx e la mailing list CQRS per le varie discussioni su questo argomento.
  2. La versione per eventi (non è necessaria la versione di comando nello stesso senso della versioni di evento) è anche discussa nella mailing list CQRS. Gli eventi vengono riprodotti per raggiungere lo stato attuale di un aggregato, non di comandi. In questo modo la tua funzionalità può evolversi. Non c'è modo di cambiare il passato, ma ci sono modi per cambiare il presente/futuro. Nel caso dispari devi iniziare a monitorare lo stato in modo diverso, fornire un comando esplicito. Per le nuove proprietà sugli eventi, fornire solo impostazioni predefinite come faresti per una nuova colonna di database. Se quei nuovi valori si basano sullo stato già presenti, quindi modellare un comando esplicito per precalcularli. Il vantaggio è che puoi farlo in modo asincrono, mentre un aggiornamento del database ti costringe a modificare anche il codice. Come funzionerebbe è meglio richiesto nella mailing list CQRS.Un avvertimento! Non assumere troppo leggermente l'approvvigionamento di eventi. Puoi cavartela con solo CQRS. Vedo le persone che passano a CQRS+ES quando la maggior parte delle volte farà i CQR.

Quindi vieni a groups.google.com/group/ddddcqrs e ottieni aiuto. Un'altra risorsa utile è cqrsinfo.com

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top