假设我有一个基于 CQRS 的系统,并且我的域需要来自外部 Web 服务的一些数据来做出决策。如何正确建模?
我可以想到两个选择:
哪种方法“更好”,或者都是错误的,我应该遵循完全不同的方法?基本上,我对选项 1 没意见,因为我认为这基本上只是域内的长时间运行的计算,但不知何故,“等待”的想法让我很恼火。
我该怎么办?
最佳答案
我倾向于将我的领域视为我对物理计算器的看法。它接受输入并产生输出。该输出可以作为事件存储或发出。所以在数据中,一些行为发生了,数据出来了。所以非常关注行为。
您的选项 (1) 场景导致了围绕将服务或存储库(或者,我猜是反腐败层)注入(inject)实体的几个 DDD 讨论。普遍的共识是应该避免这种情况,应该选择双重调度。关键是域然后需要更多信息,并且需要最初传入或需要获取它。在我的计算器类比中,获取更多数据就像计算器提示您输入更多信息。
如果您使用选项 (1),那么调用该域的任何内容都需要处理任何网络调用失败才能重试。
如果您使用选项(2),您使用服务总线之类的东西,并且可能使用各种流程引擎(例如 saga 或工作流),那么服务总线处理程序或流程引擎很可能会处理失败和重试。
我认为一种解决方案不一定比另一种“更好”,而是“不同”。我会选择你觉得舒服的任何东西,如果你的基础设施已经以某种方式处理失败/重试,那么我会选择该基础设施最容易支持的选项。
希望有帮助:)
关于web-services - 从 CQRS 访问 Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21704465/