Leggendo su CQRS si parla molto di notifiche via e-mail - mi chiedo da dove ottenere i dati. Immagina un senario in cui un utente invita altri utenti a un evento. Per informare un utente che è stato invitato a un evento, gli viene inviata un'email.CQRS e notifica e-mail
I passi concreti potrebbero andare come questo:
- Un comando
CreateEvent
con una collezione di associato agli utenti di invitare, vengono ricevuti dal server. - Viene creato un nuovo aggregato
Meeting
e viene chiamato un metodoInviteUser
per ogni utente che deve essere invitato. - Ogni volta che un utente viene invitato a un evento, viene generato un evento di dominio
UserWasInvitedToEvent
. - Un mittente di notifica e-mail raccoglie l'evento di dominio e invia l'e-mail di notifica.
Ora la mia domanda è questa: dove devo andare per informazioni da includere nell'e-mail?
Dire che voglio includere una descrizione dell'evento e il nome dell'utente. Dato che questo è CQRS non riesco a ottenerlo attraverso il mio modello di dominio; Tutte le proprietà degli oggetti del dominio sono private! Dovrei quindi interrogare il lato di lettura? O forse spostare la notifica e-mail su un servizio diverso interamente?
È incredibile quanta differenza può fare una singola parola. Intendevo dire interrogare il lato LEGGI ofcours!Sono a conoscenza delle nozioni di base di CQRS :) Ad ogni modo, cosa stai dicendo che andresti nel negozio di query per includere i dati nell'e-mail? Posso vedere come questo potrebbe rappresentare un problema, poiché l'archivio query potrebbe non essere aggiornato, quando arriva l'evento UserWasInvitedToEvent. Una possibile soluzione potrebbe essere un componente/servizio che potrebbe ascoltare nuovi meeting, utenti e inviti e archiviare tali dati, in modo che possa inviare inviti? – t0PPy
Sì, questo è quello che stavo ottenendo. Ci sono cose come Saga in certi framework di messaggistica come NServiceBus che ti permettono di orchestrare diversi gestori di eventi che non arrivano necessariamente nello stesso ordine ogni volta. Potresti volerlo esaminare anche tu. Questi agiscono come un flusso di lavoro che consente di attendere tutte le informazioni pertinenti prima di eseguire qualche azione. –
Grazie per la risposta - mi dispiace per non averlo fatto molto tempo fa. Mi piace quello che dici, ma ho scoperto che preferisco un approccio leggermente diverso: arricchire l'evento. – t0PPy