gpt4 book ai didi

architecture - 应该在事务内部还是外部引发领域事件?

转载 作者:行者123 更新时间:2023-12-03 12:52:41 24 4
gpt4 key购买 nike

在我们的应用程序中,当域模型发生变化时,我们会引发域事件。事件处理程序执行的某些任务必须在引发事件时使用的同一事务中完成,其他任务必须在此事务之外执行。

例如,

当 Orderline 添加到 Order 实体时,会引发 OrderLineAdded 域事件,一个域事件会更改域模型的状态(因此必须在同一事务中执行),然后当事务完成时,必须更新 UI。

你会如何处理这个问题?

  • 引发两个事件,一个在事务内部,一个在事务外部。
  • 在事务内部引发事件,但使用事件处理程序发送异步请求以更新 UI?

  • 选项 1 似乎令人困惑,因为事件名称必须以某种方式传达它们是在事务中还是在事务之外,但是对于选项 2,域事件的处理程序必须始终假定它们是从事务中同步调用的。

    也许有更好的方法?

    最佳答案

    我有一个类似的问题。领域模型正在发布事件(使用 Udi Dahan 描述的技术 here )。然后我意识到即使出现问题并且稍后回滚事务,也会调用与 UI 相关的处理程序。

    为了解决这个问题,我向系统引入了另一个角色,另一种事件处理程序。我有 ITransactionalEventHadnelerINonTransactionalEventHandler .前者在 DomainEvents.Publish() 中立即同步调用。方法。后者排队等待事务提交后立即调用(使用 System.Transactions Hook )。该解决方案运行良好,可读性和可维护性都很好。

    关于architecture - 应该在事务内部还是外部引发领域事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4691710/

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