Quando si implementano eventi di dominio, i gestori di eventi possono essere utilizzati solo per problemi puramente di dominio; qualcosa che dovresti discutere con gli esperti di business o sono aperti per essere utilizzati da tutto ciò che è interessato al modello di dominio?Gestori di eventi di dominio: devono essere utilizzati per i problemi relativi al livello di applicazione?
Questo probabilmente viene spiegato meglio con un semplice esempio, si consideri un'applicazione di calendario per la pianificazione del lavoro per i dipendenti.
Potremmo avere i seguenti eventi dominio ...
AppointmentAdded AppointmentRemoved AppointmentContentChanged AppointmentMoved
Abbiamo i gestori di questi eventi, per esempio quando un appuntamento viene spostato in un tempo al di fuori dei dipendenti orario di lavoro impostiamo una bandiera di avviso.
Ci sono di applicazione riguarda ovviamente interessate a questi eventi, ad esempio quando un appuntamento viene aggiunto al calendario, dovremmo aggiungerlo all'unità di lavoro in modo da poter commettere le modifiche in seguito.
Questi problemi di applicazione dovrebbero essere considerati consumatori degli eventi di dominio o dovrebbero invece essere generati e gestire eventi di sistema separati?
Dubito che promuovano la gestione degli eventi nella stessa transazione dell'aggregato che sta attivando quell'evento. Ricordo che Udi specifica che è meglio "licenziare e dimenticare" outsite la transazione aggregata, specialmente nei casi in cui i gestori di eventi non hanno nulla a che fare con il dominio (es .: messaggi di posta elettronica). "Accendi e dimentica" significa che non ti importa se l'ascoltatore ha ricevuto il messaggio, ma dovresti preoccuparti di quando lanciare un messaggio (invia il messaggio). Si invia un messaggio dopo che l'aggregazione ha terminato il suo lavoro: cambiamento di stato + persistenza. Quindi sono più che carino sparare un evento dopo la persistenza. – Tudor
P.S. Un evento può essere attivato dall'aggregato in qualsiasi momento, ma la consegna effettiva del messaggio deve essere gestita dopo la persistenza aggregata (o dopo che è stato completato un comando specifico che ha attivato l'evento). – Tudor