Domain driven design 当从订单中删除行项目时,跨有界上下文进行事务处理可以吗?

Domain driven design 当从订单中删除行项目时,跨有界上下文进行事务处理可以吗?,domain-driven-design,bounded-contexts,Domain Driven Design,Bounded Contexts,在我的领域中,我有两个与此问题相关的有界上下文: 采购-客户订购服务的地方 履行-将服务分配给要完成的供应商 在订单的整个生命周期中,客户需要在任何给定的时间对订单进行编辑 如果客户从订单中删除服务(即在采购上下文中),如果该服务已分配给要执行(但尚未执行)的供应商,则该服务也必须在履行上下文中删除 这里有几个选择,我想听听社区的意见: 我的上下文错误,因为这将创建跨上下文事务 在这里,我可能不需要事务一致性。当然,这要由业务涉众来决定,这就引出了两个问题:实现选项是什么?我如何向业务干系人提出

在我的领域中,我有两个与此问题相关的有界上下文:

  • 采购-客户订购服务的地方
  • 履行-将服务分配给要完成的供应商
  • 在订单的整个生命周期中,客户需要在任何给定的时间对订单进行编辑

    如果客户从订单中删除服务(即在采购上下文中),如果该服务已分配给要执行(但尚未执行)的供应商,则该服务也必须在履行上下文中删除

    这里有几个选择,我想听听社区的意见:

  • 我的上下文错误,因为这将创建跨上下文事务
  • 在这里,我可能不需要事务一致性。当然,这要由业务涉众来决定,这就引出了两个问题:实现选项是什么?我如何向业务干系人提出这个问题
  • 这是对“无跨上下文事务”规则的可接受违反
  • 编辑


    这一切都发生在单个进程中,因此中间事务失败的可能性非常低

    这里有一个问题要问您的客户,关于:订单始终可编辑-订单完成后编辑意味着什么?

    为什么编辑订单时会影响履行服务

    在我看来,这跨越了有限的语境。在编辑订单时,除非有充分的理由,否则不应离开其域。为什么任何订单信息都会在完成之前传播到履行服务


    基于我对您的领域显然非常有限的了解,我认为您应该先完成订单,然后将创建事件发送到服务总线,在那里由履行服务接收。因此,没有发生跨上下文的事务。

    我没有说清楚。服务尚未完成。这是刚刚与供应商安排的,供应商需要更新(即发布新的工作说明书)以反映删除的服务。我更新了问题的文本以反映我的上述评论。谢谢你,乌迪!在实际执行服务之前,订单是可编辑的。我知道这很奇怪,但这是域名的要求。这些订单很复杂,而且正在添加(可能会删除,这是我最关心的问题,因为执行客户想要取消的服务会花费利益相关者的钱)。我认为在您的场景中,事务内部运行是不可能的,因为在某个特定的时间段内会发生操作,包括取消操作(添加订单行,再次删除订单行)。我认为正确实现这一点的唯一方法是通过每个操作的事件(OrderLineAdded、OrderLineRemoved)和相应的事件处理程序。恐怕这意味着赔偿而不是交易。只要我的2美分。