【问题标题】:Granular domain events粒度域事件
【发布时间】:2018-09-10 14:26:37
【问题描述】:

最初我们使用域事件来处理与外部系统的通信。例如,每次用户更新他的电话号码或他的姓名时,我们都会引发一个 PhoneNumberUpdated 和一个 NameUpdated 事件。然后这些被处理程序捕获并发送到其他系统。

    public void SetName(Name name)
    {
        if (Name == name) return;
        (...)
        RaiseEvent(new NameUpdated(Id, name));
    }

    public void SetPhoneNumber(PhoneNumber number, PhoneNumberType type)
    {
        RaiseEvent(new PhoneNumberUpdated());
    }

只要我们不需要“聚合”事件,它就可以很好地工作。例如,我们有一项新要求,要求我们在用户更新其姓名和/或电话号码时发送一封电子邮件。在当前的结构下,我们的处理程序将收到多次通知(每个引发的事件一次),这将导致发送多封电子邮件。

让我们的事件更通用似乎不是一个好的解决方案。但是我们如何聚合在一个事务中引发的多个事件呢?

谢谢 赛博

【问题讨论】:

    标签: .net-core domain-events


    【解决方案1】:

    我相信您的新要求与您的实际域不同。您的域生成描述所发生事件的事件。另一方面,用户通知是将事件流投射到电子邮件形式中。就像您将读取模型要求与您的域分开一样,您也应该将其分开。

    一个简单的解决方案是将您关心的事件捕获到一个表格中,然后按计划每天一次,然后每次汇总发送一封电子邮件。

    【讨论】:

      猜你喜欢
      • 2013-11-24
      • 1970-01-01
      • 2013-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多