如何批量处理聚合并仅在DDD中发布一个事件?

时间:2015-09-02 10:12:41

标签: java domain-driven-design

我在开发域名时遇到了一种情况,希望有人能帮我解决。

在我当前的项目中,我需要从缓存中读取所有存储的一种类型的聚合(比如说ClientAggregate)。我从服务层读取聚合,然后,对于每一个聚合,我获取当前聚合的锁以进行一些处理,然后将其保存回来。业务逻辑要求仅发送一个事件,其中包含有关已修改聚合的信息,因为侦听此事件的系统是遗留系统并且已定义了架构。

我遇到的问题是,由于此锁定过程,我发送的事件是从服务层而不是域发送的。该逻辑需要在一个事件中发送已经一起修改的聚合的信息。因为性能原因我需要单独锁定聚合,所以我无法将所有聚合传递给域服务来处理逻辑并生成事件。我在这里的选择是直接从域服务内部锁定,但然后我将基础架构逻辑泄漏到我的域中。

因此,在我当前的解决方案中,该服务包含域逻辑以迭代聚合并生成事件。在域服务中执行此操作,逻辑将在域中,但锁定机制将需要移动。第三种选择是为每个修改过的聚合发布一个事件,但是应该有一些东西能够全部消耗它们,等待整个过程完成,所以我不知道这是否是一个选项。

1 个答案:

答案 0 :(得分:0)

  

业务逻辑要求只发送一个事件,其中包含有关已修改聚合的信息,因为侦听此事件的系统是遗留系统并且已经定义了模式。

这听起来不像是对我来说真实的域事件。如果是这样,您尝试以这种方式构建系统的原因将是,因为域的工作方式而不是“因为系统正在侦听此事件是遗留系统”。

所以你应该做的是:

  • 按照您已有的方式从服务层控制整批处理。
  • 如果处理每个聚合的逻辑是域逻辑,则将其提取到域服务中并从服务层调用它。
  • 该域名服务也可能会发布域名事件,如果域名需要
  • 完成后,从服务层发布“已完成*事件。 域事件。