Domanda

CQRS mi ha preso in modalità di pensare .. Sono tryinng per iniziare un nuovo progetto con CQRS idee. Le principali cose che mi piace è
1) la separazione delle query e dei comandi. query nostro dominio sono stati un problema.
2) utilizzando l'archiviazione di eventi per il Controllo - non sarò usarlo per Replay - almeno non ora.

Io sono buono con il lato query e ho ancora alcune domande sul dominio Eventi

Se un comando provoca updation di radici multiple di inerti (es. Ordine e OrderDetail) avrò la loro ambito in UnitofWork (transazionale). Ora ogni dominio è responsabile per la pubblicazione di eventi quando avviene un cambiamento al suo stato.

diciamo il comando cambia 3 record OrderDetail. Ogni OrderDetail pubblicherà 2 eventi. Alla fine abbiamo 6 eventi.

a) Se io pubblicherò gli eventi come appena ho fatto le modifiche all'oggetto dominio (ma non commesso l'operazione) come faccio a invertire gli eventi che sono stati pubblicati (e può essere stata consumata dagli abbonati)

  • Quello che mi viene in mente è quello di tenere gli eventi da pubblicare in un elenco 'sotto la stessa unità di ambito di lavoro' e una volta che la committ sulla transazione è stata chiamata, memorizzare e pubblicarlo. Questo suono qualcosa che si farebbe.

b) Se le modifiche in OrderDetail richiede che qualche cambiamento avvenga anche in Order Aggregate Root poi
    i) Dovrei basare tali modifiche gestendo gli eventi pubblicati da OrderDetail aggregata? Per es. diciamo due Dettaglio dell'Ordine sono stati rimossi. Questo rende Stato dell'ordine da "preferito" a "Not preferito".     ii) Che cosa succede se gli errori di evento e non aggiorna lo stato dell'ordine -. Se resti ordine preferito allora viene spedito in 2 giorni

Aggiunta un'altra domanda
c) sono "eventi di dominio sono la fonte di tutti i cambiamenti di stato dell'applicazione" o sono "Risultato di tutti i cambiamenti di stato messa in opera"

Grazie in anticipo,

Il Mar

È stato utile?

Soluzione

a) non si dovrebbe pubblicare eventi fino a quando la transazione si impegna, un evento reprsent qualcosa che è successo , e quindi la ragione per cui essi sono tutti nominati nel passaggio teso (ad es OrderClearedEvent). Anche nel caso che si deve "Ripristina" un evento, si dovrebbe prendere un'azione correttiva, cioè tu non cancellare l'evento, è necessario attivare un nuovo evento che corregge gli effetti dell'evento si desidera ripristinare

b) sembra che questo è più di un problema su come si si sta modellando entità e comandi che qualsiasi altra cosa. Non posso pensare a una ragione per la quale OrderDetail sarebbe un AggregateRoot, ma non so proprio dominio ...

c) I comandi si tradurrà in almeno un evento in corso di pubblicazione

Spero che questo aiuti :) Come Rinat detto, il gruppo Google è il posto migliore per fare domande, avere anche uno sguardo al cqrsinfo.com e il codice di esempio da github.com/MarkNijhof/Fohjin e github.com/gregoryyoung/ mr

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