.net core 粒度域事件

.net core 粒度域事件,.net-core,domain-events,.net Core,Domain Events,最初,我们使用域事件处理与外部系统的通信。例如,每次用户更新其电话号码或姓名时,我们都会引发一个PhoneNumberUpdated和一个NameUpdated事件。然后处理程序会捕获这些数据并将其发送到其他系统 public void SetName(Name name) { if (Name == name) return; (...) RaiseEvent(new NameUpdated(Id, name)); }

最初,我们使用域事件处理与外部系统的通信。例如,每次用户更新其电话号码或姓名时,我们都会引发一个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());
    }
只要我们不需要“聚合”事件,它就非常有效。例如,我们得到一个新的要求,要求我们在用户更新其姓名和/或电话号码时发送一封电子邮件。在当前的结构中,我们的处理程序将收到多次通知(每次引发一个事件),这将导致发送多封电子邮件

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

Thx
Seb

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

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