本文介绍了一种称为“域事件”的出色模式:http://www.udidahan.com/2009/06/14/domain-events-salvation/
然而,用户Andy在评论27中突出显示了这种模式的一个主要缺陷:如果事务失败,我们不希望我们的域事件执行。因此,我们需要创建某种排队机制。
不幸的是,这听起来似乎会使一项本应简化系统的技术大为复杂化。
有没有人知道排队域事件的一些好例子或讨论,特别是与NHibernate很好地集成的解决方案?
答案 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));
}
}