Domain driven design 域事件是否也会取代向实体中注入域服务?

Domain driven design 域事件是否也会取代向实体中注入域服务?,domain-driven-design,Domain Driven Design,引用是 注意-这里我使用术语“将服务注入实体”来将服务传递给构造函数或将其作为参数传递给方法 a) 处理程序与那些也由域操作触发但在域本身内处理的操作/操作之间有什么区别?也许区别在于前者(即处理程序,或者更准确地说,它们的操作)不表示域概念,而后者表示域概念 (b) 您不需要向域实体中注入任何内容 引入域事件的原因是,我们不必将服务注入域实体。但是,由于将域服务DS注入实体也不是很理想,在这种情况下,处理程序(即他们的操作)难道不是域概念吗(即不是将DS注入实体,而是处理程序将调用此DS) c

引用是

注意-这里我使用术语“将服务注入实体”来将服务传递给构造函数或将其作为参数传递给方法

a) 处理程序与那些也由域操作触发但在域本身内处理的操作/操作之间有什么区别?也许区别在于前者(即处理程序,或者更准确地说,它们的操作)不表示域概念,而后者表示域概念

(b)

您不需要向域实体中注入任何内容

引入域事件的原因是,我们不必将服务注入域实体。但是,由于将域服务DS注入实体也不是很理想,在这种情况下,处理程序(即他们的操作)难道不是域概念吗(即不是将DS注入实体,而是处理程序将调用此DS

c) 如果处理程序确实也可以替换将DSs注入域实体,那么处理程序是否也可以替换DS本身

(d)

处理程序类不属于域模型

处理程序是否属于基础结构层?那些调用DS的处理程序呢

更新:

(a)

中心区别在于域事件处理程序是在 事实

但是由操作OP触发的动作/操作A(我们在域中而不是在处理程序中处理的动作/操作)也可能发生在事件发生后(即OP完成后)因此,我们不能说这两种类型的操作之间的主要区别在于A表示域概念,而由处理程序执行的那些操作并不表示域概念吗

b) 可以肯定的是,我最初的问题的答案是,在某些情况下,我们可以让处理程序调用适当的DSs,而不是实体调用DSs

(c)

域事件可以在以下情况下消除对域服务的需求: 在上面

所以c)的答案是,在某些情况下,处理程序确实可以替换DS?但如果是这样的话,我们能不能说在这种情况下,处理程序(即它们的操作)是域概念

(d)

处理程序并不是域的一部分,因为它们所做的只是 委托给相应的基础结构服务或域服务。 它们只是胶水的一种形式,类似于应用程序服务。他们 仍然可以在域项目中声明,但通常不会 必须是

一,

处理程序并不是域的一部分,因为它们所做的只是 委托给相应的基础结构服务或域服务

可以肯定的是,我假设“委托给”的意思是,不是实体调用适当的DS或基础设施服务,而是将调用特定服务的任务委托给处理程序

二,

它们仍然可以在域项目中声明,但通常 不需要

正如您在c)中所指出的,在某些情况下,处理程序可以替换DS本身(即它们不调用DS,但实际上自己执行所需的操作)。在这种情况下,难道我们不能说处理程序是域概念,因此属于域层吗

第二次更新:

D-II

正如您在c)中所指出的,在某些情况下,处理程序可以替换DS本身( 即他们不称为DS,但实际上执行所需的操作 自己)。在这种情况下,我们难道不能说处理者是 域概念,因此属于域层

在这些情况下,我会说处理者有两个职责- 连接事件并执行操作的过程。接线 part不是域概念,但是操作本身是

a) 那么在这些情况下,handler会违反SRP吗

(b)

布线部分不是一个领域概念,但是操作本身 是

在这种情况下,处理程序应该放在域层中吗

(二) 假设actionA返回一个值,我们如何决定通过注入执行A是否更好(注意-这里我使用术语“将服务注入实体”来将服务传递给构造函数或将其作为参数传递给方法)服务s(反过来执行A)到实体中,或者使用域事件(反过来调用S上的方法)

决策可能取决于某些域代码是否需要A的结果进行进一步处理?

A)主要区别在于域事件处理程序是在事件发生后调用的。该事件已发生且不可更改。因此,被处理者只能对已经发生的事情做出反应。此外,处理程序可能导致不属于源实体责任的行为,例如发送电子邮件

b) 域事件是一种确保更大程度的封装和解耦的模式。例如,电子邮件应该在某些操作之后发送这一事实可以通过几种方式实现。一种方法是将电子邮件服务传递给实体。然后,实体将在需要时调用电子邮件服务。另一种方法是让调用应用程序服务调用电子邮件服务。第一种方法的问题是,现在实体与电子邮件服务耦合,并且违反了SRP——域现在正在处理技术问题。第二种方法的问题是,它将res