Дизайн, управляемый доменом — Агрегаты — EventPublisher с Doctrine

Я хотел бы спросить об использовании EventPublisher внутри агрегата.

class SomeAggregate
{

private $eventPublisher;

public function __construct(EventPublisher $eventPublisher)
{
$this->eventPublisher = $eventPublisher;
}


}

Когда я создаю SomeAggregate, я передаю EventPublisher конструктору, и все идет хорошо.

Но что делать, когда я получаю этот объект из базы данных.
Doctrine выполняет реконструкцию объекта на основе полей из таблицы и пропускает EventPublisher.

Как заставить Doctrine вводить EventPublisher каждый раз, когда он получает SomeAggregate из базы данных?

Мой предпочтительный способ, если таковой существует, — сопоставить свойство $ eventPublisher с классом EventPublisher.

2

Решение

С Слушатель событий доктрины.

services:
my.listener:
class: AppBundle\EventListener\EventPublisherInjector
arguments: [@event_publisher_service_id]
tags:
- { name: doctrine.event_listener, event: postLoad }

В AppBundle\EventListener\EventPublisherInjector:

public function __construct(EventPublisher $eventPublisher)
{
$this->eventPublisher = $eventPublisher;
}

public function postLoad(LifecycleEventArgs $args)
{
$entity = $args->getEntity();
if ($entity instanceof SomeAggregate) {
$entity->setEventPublisher($this->eventPublisher);
}
}

http://symfony.com/doc/current/cookbook/doctrine/event_listeners_subscribers.html

http://doctrine-orm.readthedocs.org/en/latest/reference/events.html#postload

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector