Queuing eventi di dominio in C #
-
25-10-2019 - |
Domanda
Questo articolo descrive un grande modello chiamato 'dominio Eventi': http : //www.udidahan.com/2009/06/14/domain-events-salvation/
un problema principale con questo modello però è evidenziata in commento 27 dall'utente Andy: Se una transazione fallisce, noi non vogliamo che i nostri eventi dominio di eseguire. Pertanto, abbiamo bisogno di creare una sorta di accodamento meccanismo.
Purtroppo questo suona come sta andando a complicare in maniera massiccia una tecnica che avrebbe dovuto semplificare il sistema.
Qualcuno sa di alcuni esempi di buone o discussioni di accodamento eventi di dominio, una soluzione particolare che si integra bene con NHibernate?
Soluzione
ho lavorato come fare questo: Il segreto è il metodo di RegisterSynchronization ITransaction di NHibernate
.A titolo di esempio, ecco come potrei inviare una e-mail a un cliente solo quando la transazione è impegnata:
public class NotifyCustomerEmail
{
private void MailMessage { get; set; }
public void SendAsyncOnceTransactionCommits()
{
if (MailMessage == null)
ComposeMailMessage();
NHibernateSessionManager
.CurrentSession
.Transaction
.RegisterSynchronization(new SendEmailSynchronization(this.MailMessage));
}
}