在C#中排队域事件

时间:2011-07-25 06:24:33

标签: c# domain-events

本文介绍了一种称为“域事件”的出色模式:http://www.udidahan.com/2009/06/14/domain-events-salvation/

然而,用户Andy在评论27中突出显示了这种模式的一个主要缺陷:如果事务失败,我们不希望我们的域事件执行。因此,我们需要创建某种排队机制。

不幸的是,这听起来似乎会使一项本应简化系统的技术大为复杂化。

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

1 个答案:

答案 0 :(得分: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));
    }
}