gpt4 book ai didi

web-services - 从 CQRS 访问 Web 服务

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

假设我有一个基于 CQRS 的系统,并且我的域需要来自外部 Web 服务的一些数据来做出决策。如何正确建模?

我可以想到两个选择:

  • 命令处理程序运行域逻辑,域本身调用 Web 服务。一旦得到响应,它将适当的事件附加到当前聚合并存储它们。域基本上“等待”Web 服务返回。
  • 命令处理程序运行域逻辑,域立即发出域内部的更多数据需要事件。流程管理器对此使用react,与 Web 服务对话,对结果使用react,并在前一个聚合上创建另一个命令,基本上是诸如 continue 之类的命令。

  • 哪种方法“更好”,或者都是错误的,我应该遵循完全不同的方法?基本上,我对选项 1 没意见,因为我认为这基本上只是域内的长时间运行的计算,但不知何故,“等待”的想法让我很恼火。

    我该怎么办?

    最佳答案

    我倾向于将我的领域视为我对物理计算器的看法。它接受输入并产生输出。该输出可以作为事件存储或发出。所以在数据中,一些行为发生了,数据出来了。所以非常关注行为。

    您的选项 (1) 场景导致了围绕将服务或存储库(或者,我猜是反腐败层)注入(inject)实体的几个 DDD 讨论。普遍的共识是应该避免这种情况,应该选择双重调度。关键是域然后需要更多信息,并且需要最初传入或需要获取它。在我的计算器类比中,获取更多数据就像计算器提示您输入更多信息。

    如果您使用选项 (1),那么调用该域的任何内容都需要处理任何网络调用失败才能重试。

    如果您使用选项(2),您使用服务总线之类的东西,并且可能使用各种流程引擎(例如 saga 或工作流),那么服务总线处理程序或流程引擎很可能会处理失败和重试。

    我认为一种解决方案不一定比另一种“更好”,而是“不同”。我会选择你觉得舒服的任何东西,如果你的基础设施已经以某种方式处理失败/重试,那么我会选择该基础设施最容易支持的选项。

    希望有帮助:)

    关于web-services - 从 CQRS 访问 Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21704465/

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