Php 领域驱动设计-聚合-带条令的EventPublisher
我想询问有关在聚合中使用EventPublisher的问题Php 领域驱动设计-聚合-带条令的EventPublisher,php,symfony,doctrine-orm,event-handling,domain-driven-design,Php,Symfony,Doctrine Orm,Event Handling,Domain Driven Design,我想询问有关在聚合中使用EventPublisher的问题 class SomeAggregate { private $eventPublisher; public function __construct(EventPublisher $eventPublisher) { $this->eventPublisher = $eventPublisher; } } 当我创建一些聚合时,我将EventPublisher传递给构造
class SomeAggregate
{
private $eventPublisher;
public function __construct(EventPublisher $eventPublisher)
{
$this->eventPublisher = $eventPublisher;
}
}
当我创建一些聚合时,我将EventPublisher传递给构造函数,一切正常
但当我从数据库中检索这个对象时呢。
条令根据表中的字段重建对象,并将跳过EventPublisher
如何使发布者在每次从数据库中检索某个聚合时都能插入事件
如果存在,我更喜欢的方法是将$eventPublisher属性映射到eventPublisher类。使用原则事件侦听器
services:
my.listener:
class: AppBundle\EventListener\EventPublisherInjector
arguments: [@event_publisher_service_id]
tags:
- { name: doctrine.event_listener, event: postLoad }
在AppBundle\EventListener\eventpublisherinject
中:
public function __construct(EventPublisher $eventPublisher)
{
$this->eventPublisher = $eventPublisher;
}
public function postLoad(LifecycleEventArgs $args)
{
$entity = $args->getEntity();
if ($entity instanceof SomeAggregate) {
$entity->setEventPublisher($this->eventPublisher);
}
}
基本上你不能。不过,看看这个方法:谢谢你,伙计。我不喜欢这种处理事件的方式,因为事件不是独立的类,我很难做到这一点,但经过一些修改,我可以使用这种方法。首先,我将事件更改为类,其次,我将事件数组保留为类中的属性(与示例中完全相同)。接下来,我将有一个从聚合和所有子实体返回事件的方法。因此,我将从域外收集这些事件并发布它们。您的回答很好,但由于@Cerad,我找到了更好的解决方案:)