DDD:我应该将Symfony EventDispatcher用于我的域事件吗?

时间:2014-07-30 11:25:40

标签: php symfony events domain-driven-design

我想知道是否应该使用Symfony EventDispatcher Component来处理我的DDD应用程序中的域事件。

对我来说,当经过良好测试的组件可用时,从头开始重新安排事件调度程序是没有意义的。但另一方面,Symfony组件使所有事件都从基类Event类扩展。不希望这会将我的域事件绑定到EventDispatcher组件吗?

此外,如果我使用此组件,我应该在应用程序范围的event_dispatcher服务上引发域事件,还是应该将Symfony的应用程序事件和我的域事件分开(即创建一个新的EventDispatcher)?

1 个答案:

答案 0 :(得分:4)

我想知道为什么没有EventInterface。

这:https://github.com/symfony/symfony/issues/9539表示因为Event是一个值对象,所以不需要任何接口。我承认我并不完全遵循这个论点(至少在耦合方面),但还没有进一步研究。可能是一个很好的DDD问题。

在我的例子中,我创建了一个DomainEventInterface,它在DomainEvent中实现,而DomainEvent又扩展了Event。我使用DomainEvent作为我的基本事件类。如果我甚至需要切换调度员,这应该使重新分解相当容易。并且,至少在我看来,避免将Domain直接耦合到Event组件。

我主要创建自己的DomainDispatcher实例,以避免将我的域绑定到实际的Symfony框架。

另请注意,事件侦听器接口在S2.4中已更改。 Event对象将在3.0中简化。