Я пишу приложение PHP и хочу реализовать медиатор шаблон для основной части моей бизнес-логики. Это «ядро» на самом деле какая-то игра с большим количеством События а также статусы. Таким образом, управляемая событиями обработка этого представляется оптимальным подходом.
Сама модель посредника не является проблемой. Мне нужно только создать EventDispatcher
и приложить некоторые Listener
с этим.
(На самом деле в моем конкретном случае это немного сложнее: Listener
нужно реализовать что-то вроде Цепной из-ответственности или же государственный шаблон, чтобы обрабатывать одно и то же событие по-разному в соответствии с текущим состоянием процесса.)
Проблема в том, что обработка события может изменить состояние процесса и вызвать дальнейшие события. Это означает, что слушатели должны иметь возможность инициировать события. Это означает:
EventDispatcher
, Итак EventDispatcher
нужно либо ввести через конструктор, либо передать в уведомление (notify(string $eventName, Event $event, EventDispatcher $eventDispatcher)
) метод.new MyEvent(...)
заявления в слушателях и коде станет сложнее для тестирования.Оба имеют для меня гнилостный запах …
Как решить эту дилемму и позволить чистому коду, когда EventListener
триггерные события?
Задача ещё не решена.
Других решений пока нет …