2011-07-25 61 views
2

本文介绍了所谓的“域事件”一个伟大的格局:http://www.udidahan.com/2009/06/14/domain-events-salvation/排队域事件

这种模式不过是评论27用户安迪强调的一个重大缺陷:如果交易失败,我们不希望我们的域名事件执行。因此,我们需要创建某种排队机制。

不幸的是,这听起来像是要大量复杂化本来应该简化系统的技术。

有谁知道排队域事件的一些很好的例子或讨论,特别是与NHibernate集成的解决方案吗?

+0

的[凡提高持久性依赖域事件可能重复 - 服务,库,或UI?](http://stackoverflow.com/questions/5886174/where-to-raise-persistence-dependent-domain-events-service-repository-or-ui) – cbp

回答

5

我弄明白了如何做到这一点:秘密就是NHibernate的ITransaction的RegisterSynchronization方法。

作为一个例子,这里是如何我可能会发邮件到只有当事务被提交客户:

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

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

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

正在思考同一条线,但是你的方法是清洁器 –