In pratica sto cercando di riprendere il concetto di CQRS e concetti correlati.
Sebbene CQRS non includa necessariamente Messaging ed Event Sourcing sembra essere una buona combinazione (come si può vedere con molti esempi / post di blog che combinano questi concetti)
Dato un caso d'uso per una modifica di stato per qualcosa (ad esempio per aggiornare una domanda su SO), considereresti corretto il seguente flusso (come nella migliore pratica)?
Il sistema emette un UpdateQuestionCommand aggregato che può essere separato in un paio di comandi più piccoli: UpdateQuestion che è mirato alla Domanda Aggregate Root e UpdateUserAction (per contare i punti, ecc.) mirati alla radice di aggregazione utente. Questi vengono inviati in modo asincrono utilizzando la messaggistica point-to-point.
Le radici aggregate fanno le loro cose e se tutto va bene gli eventi fuoco QuestionUpdated e UserActionUpdated rispettivamente, che contengono lo stato che è esternalizzato ad un Event Store .. per essere persistito yadayada, solo per essere completo, non proprio il punto qui.
Questi eventi sono anche messi su un pub / sottocoda per la trasmissione. Qualsiasi sottoscrittore (tra cui probabilmente uno o più proiettori che creano le viste di lettura) è libero di iscriversi a questi eventi.
La domanda generale: è davvero la migliore pratica, che i comandi siano comunicati da punto a punto (cioè: il ricevitore è noto) mentre gli eventi vengono trasmessi (I.e: il / i destinatario / i sono sconosciuti)?
Supponendo quanto sopra, quale sarebbe il vantaggio / svantaggio di consentire ai comandi di essere trasmessi attraverso pub / sub invece di point-to-point?
Ad esempio: Durante la trasmissione di comandi durante l'utilizzo di Saga potrebbe essere un problema, dal momento che il ruolo di mediazione che una Saga deve svolgere in caso di fallimento di una delle radici aggregate è ostacolato, perché la saga non sa a quali radici aggregate partecipare per cominciare.
D'altra parte, vedo i vantaggi (flessibilità) quando i comandi di trasmissione sarebbero consentiti.