2011-07-25 2 views
2

Cet article décrit un modèle appelé « Events domaine »: http://www.udidahan.com/2009/06/14/domain-events-salvation/événements de domaine Queuing en C#

Un défaut majeur avec ce modèle est toutefois mis en évidence dans le commentaire 27 par l'utilisateur Andy: Si une transaction échoue, nous ne sommes pas voulons que nos événements de domaine s'exécutent. Par conséquent, nous devons créer une sorte de mécanisme de mise en file d'attente. Malheureusement, cela semble compliquer massivement une technique censée simplifier le système. Est-ce que quelqu'un connaît de bons exemples ou discussions sur les événements de domaine en file d'attente, en particulier une solution qui s'intègre bien avec NHibernate?

+0

double possible de [Où déclencher des événements de domaine en fonction de la persistance - services, dépôt, ou UI?] (Http://stackoverflow.com/questions/5886174/where-to-raise-persistence-dependent-domain-events-service-repository-or-ui) – cbp

Répondre

5

J'ai travaillé sur comment faire ceci: Le secret est la méthode RegisterSynchronization de ITransaction de NHibernate.

À titre d'exemple, voici comment je pourrais envoyer un e-mail à un client que lorsque la transaction est validée:

public class NotifyCustomerEmail 
{ 
    private void MailMessage { get; set; } 

    public void SendAsyncOnceTransactionCommits() 
    { 
     if (MailMessage == null) 
      ComposeMailMessage(); 

     NHibernateSessionManager 
      .CurrentSession 
      .Transaction 
      .RegisterSynchronization(new SendEmailSynchronization(this.MailMessage)); 
    } 
} 
+0

Pensait sur la même ligne, mais votre approche est nettoyeur –

Questions connexes