Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Domain driven design DDD中是否存在应用程序事件项?_Domain Driven Design_Terminology_Domain Events - Fatal编程技术网

Domain driven design DDD中是否存在应用程序事件项?

Domain driven design DDD中是否存在应用程序事件项?,domain-driven-design,terminology,domain-events,Domain Driven Design,Terminology,Domain Events,域事件在DDD中是众所周知的,可以在聚合根目录或域服务中发布。我这里的问题是,可以在应用程序服务/用例中发布域事件吗 例如,简化。我有一个名为UseCaseA的应用程序服务,它执行调用一些聚合根的各种操作。如果我想在这个用例结束时引发一个事件,我可以在这个应用程序服务中发布UseCaseAFinished事件吗?这是一个域事件还是我们应该称之为应用程序事件?DDD中是否存在应用程序事件术语 提前谢谢 可以在应用程序服务/用例中发布域事件吗 通常不是:域信息属于域模型,而不是应用程序 现在,业务部

域事件在DDD中是众所周知的,可以在聚合根目录或域服务中发布。我这里的问题是,可以在应用程序服务/用例中发布域事件吗

例如,简化。我有一个名为
UseCaseA
的应用程序服务,它执行调用一些聚合根的各种操作。如果我想在这个用例结束时引发一个事件,我可以在这个应用程序服务中发布
UseCaseAFinished
事件吗?这是一个域事件还是我们应该称之为应用程序事件?DDD中是否存在应用程序事件术语

提前谢谢

可以在应用程序服务/用例中发布域事件吗

通常不是:域信息属于域模型,而不是应用程序

现在,业务部门对流程的进展/终止感兴趣是正常的。但这只是一条线索,表明流程本身也应该在域中建模


“应用程序事件”更可能专门用于应用程序关注点:想想“可观察性”。

我认为您应该从另一个角度来看待这一点。让我解释一下

不要将事件作为UseCaseA的结果来引发,以处理您的副作用,例如发送电子邮件。您希望引发的事件仍然应该是您描述的域事件

然后,在处理这个特定的域事件时,您可以引发一个“应用程序事件”(我称之为集成事件),然后处理发送电子邮件、进行监视和记录的副作用

此集成事件可以跨越多个BC、服务甚至应用程序

逐步流程示例:

  • 开始执行UseCaseA
  • 对实体执行操作,更改状态等
  • 从域引发域事件
  • 在执行UseCaseA结束之前分派域事件
  • 在一个或多个域事件处理程序中捕获域事件
  • 在其中一个处理程序中,引发集成事件以处理“应用程序范围”的副作用
  • 在集成事件处理程序中处理集成事件,并发送电子邮件、进行日志记录、通知监控等

  • 集成事件可以通过多种方式调度,但通常是通过某种类型的事件总线。

    因此,可以从应用程序服务启动事件,以便能够执行可观察性任务,例如监视或记录,对吗?如果想在用例结束时发送电子邮件?应该使用域事件在域层完成,还是可以使用应用程序服务引发的事件?嗨,如果用例中有多个域操作,那么应该使用哪个域事件处理程序引发集成事件?这通常是高度情景化的,我会说:这取决于。我在过去所做的是,如果在某个时刻我不太清楚用例中的哪个特定事件应该导致引发集成事件,我将创建一个单独的域事件处理程序,其唯一目的是引发集成事件。稍后,当事情开始明朗化时,我将重构(移除、加入等处理程序)