Domain driven design 如何使用领域驱动设计对需求进行建模

Domain driven design 如何使用领域驱动设计对需求进行建模,domain-driven-design,Domain Driven Design,我有一个需求,我需要根据特定的标准将两个事件分组为一个事务。下面是关于该要求的一些想法 事件:: 我们将不断地向我们的系统接收事件 每个事件将有一些缓冲时间与其他事件分组 如果缓冲时间已过,则需要丢弃该事件 我们需要根据两个事件的信息将两个事件分为一组 如果事件信息不足,我们将向其他组件发送事件信息,该组件将使用更正的数据进行响应 每当我们对事件进行分组时,如果相关事件转到数据更正组件,我们希望保留另一个事件,即使我们不能100%确定匹配条件。我们之所以要执行此步骤,是因为我们希望尽可能多地匹配

我有一个需求,我需要根据特定的标准将两个事件分组为一个事务。下面是关于该要求的一些想法

事件::

  • 我们将不断地向我们的系统接收事件
  • 每个事件将有一些缓冲时间与其他事件分组
  • 如果缓冲时间已过,则需要丢弃该事件
  • 我们需要根据两个事件的信息将两个事件分为一组
  • 如果事件信息不足,我们将向其他组件发送事件信息,该组件将使用更正的数据进行响应
  • 每当我们对事件进行分组时,如果相关事件转到数据更正组件,我们希望保留另一个事件,即使我们不能100%确定匹配条件。我们之所以要执行此步骤,是因为我们希望尽可能多地匹配事件

  • 我想使用领域驱动设计对该需求进行建模,如有任何建议,我们将不胜感激。

    如果不了解您的业务需求,很难回答。但我们可以先从假设和定义开始:

    我将DDD中的事件称为对您的域很重要的事情,已经发生(在过去),这是不可否认的事实,无法撤销

    在我的定义中,聚合或域服务负责发出事件

    因此,您的事件组看起来像一个概念,表示一组相关事件对我的领域也很重要

    我想你可以用两种方式来思考这个概念:

  • 组是对您已经发生的事件的特殊视图。然后,组只是一个组件,其状态是从相关事件列表派生的
  • 组是一种聚合,它是一种具有生命周期且基于状态的流程,当满足完成组的条件时,会发出单个组事件
  • 在第一种情况下,您可以实现一个组查询,该查询侦听已发布的事件并将它们投影到您的组概念中


    在第二种情况下,您有一个对业务请求做出反应的聚合(您可以将其称为命令)并管理一些持久状态。当您请求您的聚合创建一个组,并且您的聚合处于正确的状态时,您的聚合将发出一个组事件。

    听起来您可能会从消息总线中受益。如果您使用的是.net,请查看nservicebus。您仍然可以使用DDD,但是一条消息可能会为您解决许多这些问题(例如,使用nservicebus Saga)。事件和2。组实体将具有类似“Create”的方法,其中它将创建事件,“UpdateStatus”将更新事件的状态。组将具有创建组和更新组的方法。为了将事件与一个组进行匹配,我需要将事件数据与组数据进行比较。为此,我需要点击进入EventGroupingService的组存储库。我的方向正确吗?是的,如果一个域服务需要多个存储库才能执行其功能,则可以将多个存储库注入其中。将事件数据与组数据匹配是一种域逻辑,我可以在域服务中执行此操作吗?是的,完全可以将域逻辑放入域服务中:)