gpt4 book ai didi

email - CQRS 和电子邮件通知

转载 作者:行者123 更新时间:2023-12-04 15:04:49 25 4
gpt4 key购买 nike

阅读 CQRS 有很多关于电子邮件通知的讨论——我想知道从哪里获取数据。想象一个场景,其中一个用户邀请其他用户参加一个事件。为了通知用户他已被邀请参加事件,他会收到一封电子邮件。

具体步骤可能是这样的:

  • 一个 CreateEvent服务器接收到带有要邀请的相关用户集合的命令。
  • 一个新的Meeting聚合被创建和一个方法InviteUser为每个被邀请的用户调用。
  • 每次邀请用户参加事件时,域事件 UserWasInvitedToEvent被提出。
  • 电子邮件通知发件人接收域事件并发送通知电子邮件。

  • 现在我的问题是:我在哪里可以找到包含在电子邮件中的信息?

    假设我想包含事件描述以及用户名。由于这是 CQRS,我无法通过我的域模型得到它;域对象的所有属性都是私有(private)的!然后我应该查询读取端吗?或者也许将电子邮件通知完全移动到不同的服务?

    最佳答案

    在 CQRS 中,您将命令与查询端分开。您将始终希望转到查询端以获取给定事件处理程序的数据。写入数据库将是一个单独的数据库,其中包含构建域对象所需的数据,并且不会针对读取进行优化,而是针对写入进行优化。

  • 域应注册并发送 EventCreated事件处理程序/处理器。这可以从 Meeting 的构造函数中提出。总计的。
  • 事件处理组件将获取 EventCreated事件,并使用事件中包含的数据(即事件的 Id 及其名称)更新查询数据库。
  • 域可以注册并发送 UserWasInvitedToEvent事件处理器。
  • 事件处理器将接收 UserWasInvitedToEvent并使用任何必要的报告数据更新查询存储。
  • 另一个事件处理组件也会选择 UserWasInvitedToEvent事件。此过程可以访问查询数据库并拉回发送电子邮件所需的所有数据。

  • 查询数据库只不过是一个报告数据库,因此您甚至可以拥有一个特定的表,将电子邮件所需的所有数据存储在一个地方。

    为了将几个不同的事件编排到一个处理程序中(假设事件可能在不同的时间以不同的顺序处理),您可以利用 Saga 的概念在您的消息总线中。 NServiceBus 是一个消息总线的例子, supports Saga's .另请参阅此 StackOverflow 问题: NServiceBus Delayed Message Processing .

    关于email - CQRS 和电子邮件通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2913485/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com