【问题标题】:requesting data from the readmodel in command handler在命令处理程序中从 readmodel 请求数据
【发布时间】:2012-01-08 05:45:07
【问题描述】:

我需要向管理员列表发送一封电子邮件作为回复 从 UI 发送的命令。需要通知的管理员是 从针对读取模型的查询中检索到。

目前 - 根据我的理解,我只有一个 选项:在发送命令之前收集所需的管理员并添加 他们(姓名/电子邮件对)到命令。

或者 - 从命令处理程序跨越到读取是否可以接受 模型?感觉不对,但我真的没有看到任何其他方式 这样做?

【问题讨论】:

    标签: design-patterns domain-driven-design cqrs ncqrs


    【解决方案1】:

    假设您的命令正在引发事件...

    对我来说,正确的方法是使用单独的事件处理程序来捕获命令的事件并触发电子邮件的发送。您的事件处理程序将查询现有的读取模型以获取管理员列表。

    让事情变得简单,因为您的命令处理程序不需要意识到需要向管理员发送电子邮件。

    您可以走极端概念上为此拥有一个单独的系统,该系统还处理您的管理员创建/删除的事件,存储在特定的读取模型中纯粹是为了保存管理员列表发送电子邮件至。

    【讨论】:

      【解决方案2】:

      您根本无法从您的域访问读取模型,因为您的域是临时的,而不是您的读取模型。您需要有在命令执行时收到的电子邮件列表:)

      您可以或在触发邮件的命令中包含管理员电子邮件列表,然后将其作为事件和时间持久化,或者您可以让您的域实体实例化其他将获取管理员电子邮件列表的域实体.

      希望对您有所帮助。

      【讨论】:

      • 我想我是在错误的地方尝试这样做。我将从命令处理程序发送的电子邮件移到非规范化器中。有什么问题吗?
      【解决方案3】:

      你没有告诉任何关于你是如何实现命令端的。我通常在命令处理程序中提供这些信息。然后,我根据添加到命令中的 ID 在数据源中查询电子邮件和姓名。您不需要通过域模型来执行此操作。如果您在命令端没有可用的数据,我认为通过服务从读取端收集数据不会有什么大问题。我不会从域模型中这样做。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-17
        • 2012-03-08
        • 1970-01-01
        相关资源
        最近更新 更多