【发布时间】:2013-02-13 18:20:42
【问题描述】:
报价是from
注意 - 这里我使用术语“将服务注入实体”来将服务传递给构造函数或传递它作为参数到方法
a) handlers 和那些 actions/operations 之间的区别是什么,它们也由 domain operations 触发,但在内部处理域本身?或许区别在于前者(即handlers,或更准确地说是它们的actions)不代表领域概念,而后者代表领域概念?
b)
你确实不需要需要向你的域实体注入任何东西。
引入域事件的原因是我们不必将服务注入到域实体中。但是由于将 Domain Services DS 注入 entities 也不是很理想,因此在这种情况下 handlers 不能(即他们的动作)是领域概念(即不是将DS注入到一个实体中,handler 会调用这个 DS )?
c) 如果确实 handlers 也可以代替将 DSs 注入 域实体,那么是否也存在 handlers 的情况> 可以替换 DS 本身吗?
d)
处理程序类不属于域模型。
处理程序是否属于基础设施层?那些调用 DS 的 处理程序 呢?
更新:
一)
主要区别在于域事件处理程序是在之后调用的 事实。
但是动作/操作 A(我们在域中处理而不是在处理程序中) 由 操作 OP 触发也可能发生在事实之后(即在 OP 完成之后)。所以我们不能争辩说主要区别这两种动作之间的区别在于A代表一个领域概念,而那些动作由handlers 不代表领域概念?
b) 只是为了确定——我最初的问题的答案是,在某些情况下,我们可以有 handlersentities 调用 DSs /em> 调用适当的DSs?
c)
在以下情况下,域事件可以消除对域服务的需求 以上
那么对 c) 的回答是,在某些情况下 handlers 确实可以替代 DS?但如果是这样,我们难道不能说在这种情况下处理程序(即他们的动作)是领域概念吗?
d)
处理程序实际上并不是您的域的一部分,因为它们所做的只是 委托给适当的基础设施服务或域服务。 它们只是一种胶水形式,类似于应用程序服务。他们 仍然可以在域项目中声明,但通常不会 需要。
我。
处理程序实际上并不是您的域的一部分,因为它们所做的只是 委托给适当的基础设施服务或域服务。
只是为了确定 - 我假设您所说的“委托给”是指实体调用适当的DS或基础设施服务,我们将调用特定服务的工作委托给处理程序?
二。
它们仍然可以在域项目中声明,但通常它们 不需要。
正如您在 c) 中所述,在某些情况下,handlers 可以替换 DS 本身(即它们不调用 >DS,但实际上是自己执行所需的操作)。在这种情况下,我们难道不能说 handlers 是 领域概念,因此属于 领域层?!
第二次更新:
D-II
正如您在 c) 中所述,在某些情况下,处理程序可以替换 DS 本身 ( 即他们不调用 DS,但实际上执行所需的操作 通过他们自己 )。在这种情况下,我们不能说处理程序是 领域概念,因此属于领域层?!
在这些情况下,我会说处理程序有两个职责 - 连接事件并执行操作。接线 部分不是域概念,但操作本身是。
a) 那么在那些情况下 handler 会违反 SRP 吗?
b)
接线部分不是域概念,而是操作本身 是。
在这种情况下handler应该放到领域层吗?
2) 假设 action A 返回一个 value,我们如何判断 injecting 执行 A 是否更好 (注意 - 这里我使用术语“将服务注入实体”用于将 服务 传递给 构造函数 或将其作为方法的参数传递)服务S(依次执行A)到entity 或使用 Domain Event 代替(这反过来会在 S 上调用 methods)?
也许决定取决于某些域代码是否需要A的结果来进行进一步的处理?
【问题讨论】:
-
域事件只是您域中发生的其他系统可能感兴趣的有趣事情。您只需要某种方式将这些事件公开给其他系统。您可以在您的域中使用它们,但这不是它们的主要目的。
-
@Eben Roux:所以域事件的主要目的是只通知其他系统域内发生的有趣事情?
-
没错。它可能不是唯一的责任,但绝对是主要的。可以处理的领域服务应该能够很好地处理您的领域概念/任务。
-
@Eben Roux “域服务可能可以处理应该能够很好地处理您的域概念/任务。”我不确定我是否遵循您的推理,因为我的问题不是处理程序是否应该执行操作而不是域服务 DS,而是更多的是处理程序是否应该调用 DS 而不是我们将该 DS 注入实体? !
-
这将归结为偏好,但将 DS 传递给实体方法很好,这就是我可能会做的。