我正在尝试在Symfony2项目中实现领域驱动设计,并遇到了一些问题。在阅读了一些关于领域模型的文章后,我发现:
- 我应该将所有业务逻辑放入我的领域模型(实体)中。
- 需要执行并不属于领域逻辑的应用程序级别的内容,可以通过领域事件来触发(发送电子邮件、将某些消息放入队列等)。
幸运的是,Symfony提供了事件,但问题在于 - 我无法从我的实体中引发事件。Symfony文档建议使用DI将调度器注入到引发事件的类中。
http://symfony.com/doc/current/book/internals.html#passing-along-the-event-dispatcher-object
Symfony实体是可实例化的,而非可注入的。 目前我能看到两种方式: 1)像这样为实体提供事件分发器class FooEntity
{
protected $dispatcher = null;
public function setEventDispatcher(EventDispatcher $dispatcher)
{
$this->dispatcher = $dispatcher;
}
}
2)从服务中引发事件(而不是从实体中引发事件)。
这些选项都不太好,因为它们似乎违背了领域模型的思想。请问您能否指点我正确的方向?