2013-02-13 62 views
2

行情是from域名事件是否也将域名服务注入实体?

注 - 在这里我使用的术语“注射服务为实体”两个传递服务构造或把它当作一个参数方法

一)什么是处理和那些动作/操作这也被触发的区别域名操作,而是在本身内处理?也许不同的是,前者(即处理,或者更准确地说他们行动)并不代表领域概念,而后者则代表领域概念

B)

需要注入任何东西到你的域实体。

原因引入域事件是这样,我们就不必注入服务域实体。但由于注入域服务DS实体也不是非常理想,不能在这种情况下处理(即其行动)是域概念(即代替注射DS成一个实体,处理程序会打电话给这个DS)?

c)若确实处理也可以取代注射的DS域实体,在那里也是在处理可以取代DS本身的情况呢?

d)

处理类不域模型中的归属。

处理属于基础设施层?那些处理程序那叫DS

UPDATE:

一个)

中心不同的是,一个域事件处理程序 事后调用。

动作/操作操作OP触发后的事实,也可能发生(这是我们处理内,而不是内处理一)(即在OP完成后)。所以我们不能说这些两种类型的动作之间的主要区别在于A代表了域名概念,而那些动作处理程序执行不代表域名概念

B)只是可以肯定 - 所以会回答我原来的问题是,在某些情况下,而不是实体调用的DS的,我们可以有处理调用适当的DS

C)

域事件可以消除的情况下需要域名服务,如 上述

所以回答C)的是,在某些情况下处理的确可以取代DS?但是如果是这样,我们不能争辩说,在这种情况下,处理程序(即它们的动作)是域概念

d)

处理程序是不是真的你的域的一部分,因为他们做的是 授人以适当的基础设施服务或域名服务。 它们只是一种粘合剂,类似于应用程序服务。他们 仍然可以在域项目中声明,但通常他们不需要 。

处理程序是不是真的你的域的一部分,因为他们做的是 授人以适当的基础设施服务或域名服务。

只是可以肯定 - 我是“授人以”假设你的意思是不是实体调用适当DS基础设施服务,我们委托调用特定服务到的工作处理程序

二,

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

正如你在C)指出,在某些情况下处理可以代替DS本身(即它们不叫DS,但实际上是由执行所需的操作他们自己 )。在这种情况下,我们是否可以认为处理程序域概念并且同样属于域层

第二次更新:

d - II

正如你在C所示),在某些情况下,处理器可以替代DS本身( 即它们不叫DS ,但实际上自己执行所需的操作 )。在这种情况下,我们不能认为处理程序是域概念,并且属于域层吗?

在这些情况下,我会说处理程序有两个职责 - 接线事件和执行操作。配线 部分不是域的概念,但操作本身是。

a)那么在这些情况下处理程序会违反SRP?

B)

布线部分不是域的概念,但操作本身 是。

如果在这种情况下处理投入领域层

2) 假设行动一个返回,我们应该如何决定它是否是更好地执行一个注入(注意 - 我在这里使用的术语“注射服务成针对传递服务构造或把它当作的参数的方法服务的实体小号(这反过来执行)转换成实体或使用域事件代替(这反过来会调用方法小号)?

也许决定取决于一些域代码是否需要的一个结果进行一些进一步处理

+1

域名事件是您的域中发生的其他系统可能感兴趣的有趣事情。您只需要某种方式将这些事件公开给其他系统。您*可以*在您的域中使用它们,但这不是它们的主要目的。 – 2013-02-14 05:39:58

+0

@Eben Roux:所以域事件的主要目的是只通知其他系统发生在域内的有趣事情? – user437291 2013-02-14 16:31:39

+1

这是正确的。它可能不是唯一的责任,但肯定是主要的。域服务可能可以处理的应该能够很好地处理您的域概念/任务。 – 2013-02-14 17:56:26

回答

6

a)主要区别在于事后调用域事件处理程序。该事件已经发生并且是不可改变的。因此,处理只能做一些事情来回应已经发生的事情。此外,处理程序可能导致不属于源实体责任的行为,例如发送电子邮件。

b)域事件是确保更高程度的封装和解耦的模式。例如,在某些操作之后应该发送电子邮件的事实可以通过几种方式来实现。一种方法是将电子邮件服务传递给实体。实体会在需要时调用电子邮件服务。另一种方法是让呼叫应用程序服务调用电子邮件服务。第一种方法的问题是,现在该实体与电子邮件服务耦合并违反了SRP - 该域现在正在处理技术问题。第二种方法的问题在于,它负责了解何时应用程序服务发送电子邮件。域事件解决了这两个问题,因为现在实体决定何时发生事件并且处理程序决定如何处理事件。

c)在上述情况下,域事件可以消除对域服务的需求,但是它们在所有情况下都不需要域服务。在某些情况下,实体可能需要一个域服务才能首先调用行为。这是域事件无法提供帮助的地方,因为它们只是在事实场景之后才处理。

d)处理程序并不是您的域的真正组成部分,因为他们所做的只是委托给相应的基础架构服务或域服务。它们只是一种粘合剂,类似于应用程序服务。他们仍然可以在域项目中声明,但通常他们不需要。

UPDATE

一)事实并非总是如此。域事件处理程序可以调用另一个域操作。这是在单个进程中执行事件驱动架构的一种方式。

b)是的,域事件处理程序可以调用域服务。有一个处理程序调用域服务来响应事件,这是一种以分离方式向实体添加行为的方式 - observer pattern的一种形式。

c)正常情况下,处理程序将委托给某些东西以执行域操作。处理程序本身只是胶水。但是,您可以将域逻辑放入处理程序,在这种情况下,它将像域服务一样行事。

d1)是的。处理程序可能是一个简单的类,具有某种服务的构造函数依赖关系。当它处理一个事件时,它会在所述服务上调用适当的方法。

d2)在这些情况下,我会说处理程序有两个责任 - 接线事件和执行操作。布线部分不是一个领域概念,但操作本身是。

更新2

一)是的,我会这么说。根据您的域事件如何实现,处理程序可能只是一个lambda - 它不需要是一个类。

b)如果处理程序正在委托域服务,则它可以进入域图层。如果它利用基础设施服务,则可能需要进入基础设施层。而且,如a)所述,处理程序不需要是类,它可以是lambda。

2)域事件值得注意的是在域中发生了。使用域名事件,您可以设想订阅者对该事件感兴趣。此事件可用于调用域中的其他行为或者在外部发布。主要观察是这是一个过去式的不变事件。

也许决定取决于某些域代码是否需要A的 结果进行一些进一步处理?

这是事实。如果域操作需要域服务S的结果以继续执行其行为,那么应该将该服务传递给该行为方法。实体无法接收处理发布的域事件的结果。

+0

你能看到我的更新吗? – user437291 2013-02-13 19:22:16

+0

你能看到我的第二次更新吗? – user437291 2013-02-14 16:31:17

+0

感谢您的帮助 – user437291 2013-02-14 17:42:38