报价来自
注意 - 这里我使用术语“将服务注入实体”来将服务传递给构造函数或将其作为参数传递给方法
a)处理程序和那些也由域操作触发但在域本身内处理的动作/操作有什么区别?也许区别在于前者(即处理程序,或更准确地说是它们的动作)不代表领域概念,而后者代表领域概念?
b)
您不需要向域实体中注入任何内容。
引入域事件的原因是我们不必将服务注入域实体。但是由于将域服务 DS注入实体也不是很理想,在这种情况下,处理程序(即它们的操作)不能成为域概念(即,处理程序不是将DS注入实体,而是调用此DS)?
c)如果确实处理程序也可以替换将DS注入域实体,是否还有处理程序可以替换DS本身的情况?
d)
处理程序类不属于域模型。
处理程序是否属于基础设施层?那些调用DS的处理程序呢?
更新:
一种)
主要区别是域事件处理程序是在事后调用的。
但是操作OP触发的操作/操作 A(我们在域中而不是在处理程序中处理的操作)也可能在事后发生(即在OP完成之后)。所以我们不能争论这些之间的主要区别吗两种类型的动作是A代表一个领域概念,而那些由处理程序执行的动作不代表领域概念?
b)只是为了确定-所以我最初的问题的答案是,在某些情况下,我们可以让处理程序调用适当的DS ,而不是实体调用DS吗?
C)
在上述情况下,领域事件可以消除对领域服务的需求
那么对c)的回答是在某些情况下处理程序确实可以替换DS吗?但如果是这样,我们难道不能争辩说在这种情况下处理程序(即他们的动作)是领域概念吗?
d)
处理程序实际上并不是您的域的一部分,因为它们所做的只是委托给适当的基础设施服务或域服务。它们只是一种胶水形式,类似于应用程序服务。它们仍然可以在域项目中声明,但通常不需要。
一世。
处理程序实际上并不是您的域的一部分,因为它们所做的只是委托给适当的基础设施服务或域服务。
只是为了确定-我假设“委托给”您的意思是,我们将调用特定服务的工作委托给处理程序,而不是实体调用适当的DS或基础设施服务?
二、
它们仍然可以在域项目中声明,但通常不需要。
正如您在c)中所指出的,在某些情况下,处理程序可以替换DS本身(即它们不调用DS,但实际上它们自己执行所需的操作)。在这种情况下,我们不能说处理程序是领域概念,因此属于领域层吗?!
第二次更新:
D-II
正如您在 c) 中所指出的,在某些情况下,处理程序可以替换 DS 本身(即它们不调用 DS,但实际上它们自己执行所需的操作)。在这种情况下,我们不能说处理程序是领域概念,因此属于领域层吗?!
在这些情况下,我会说处理程序有两个职责 - 连接事件和执行操作。接线部分不是域概念,但操作本身是。
a) 那么在这些情况下,处理程序会违反 SRP 吗?
b)
接线部分不是域概念,但操作本身是。
在这种情况下应该将处理程序放入域层吗?
2)假设动作 A返回一个值,我们如何决定是否通过注入来执行A更好(注意 - 这里我使用术语“将服务注入实体”来将服务传递给构造函数或将其作为方法的参数)服务S(它反过来执行A)到一个实体或使用域事件代替(这反过来会调用S上的方法)?
也许决定取决于某些域代码是否需要A的结果进行进一步处理?