我是 DDD 的新手,我现在正在阅读文章以获取更多信息。 articles其中之一专注于领域事件(DE)。例如,发送电子邮件是在执行一段代码时满足某些条件后引发的域事件。
代码示例展示了一种处理领域事件的方法,后面跟着这一段
Please be aware that the above code will be run on the same thread within the same transaction as the regular domain work so you should avoid performing any blocking activities, like using SMTP or web services. Instead, prefer using one-way messaging to communicate to something else which does those blocking activities.
我的问题是
谢谢
最佳答案
这是一个普遍的问题时期,别介意 DDD
通常,在需要以高性能方式响应的任何系统中(例如 Web 服务器,任何长时间运行的事件都应与触发过程异步处理。
这意味着排队。
回滚您的事务应该从队列中删除项目。
当然,您现在需要额外的机制来处理队列中的项目无法处理的情况 - 即未发送电子邮件 - 您还需要在触发代码中允许这种情况 - 后续处理依赖于较早的已经发生的过程将在某些时候引起问题。
简而言之,您的排队机制本身应该是事务性的并允许重试,您需要将整个事件链视为一个工作流。
关于domain-driven-design - 领域驱动设计和领域事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6280214/