Я пишу приложение для Symfony 4. Его ядро - это процесс с несколькими вложенными подпроцессами. В общем, идея, как с этим справиться, выглядит так:
Есть несколько processes (иерархия основных процессов и их подпроцессов). У каждого процесса есть набор state. У каждого процесса есть набор разрешенных event.
Фасадом этого механизма является SystemEventHander. Он регистрирует обрабатываемые процессы, анализирует входящие запросы, а также находит и выполняет соответствующий обработчик для текущего события.
services.yaml
# events
App\Process\SystemEventHandlerInterface:
class: 'App\Process\SystemEventHandler'
tags:
- { name: kernel.event_listener, event: general:user_message_received, method: handle }
- { name: kernel.event_listener, event: process_a:foo, method: handle }
- { name: kernel.event_listener, event: process_a.process_b:foo, method: handle }
- { name: kernel.event_listener, event: process_a.process_c:bar, method: handle }
- { name: kernel.event_listener, event: process_a.process_d:baz, method: handle }
- { name: kernel.event_listener, event: process_a.process_d.process_e:buz, method: handle }
Таким образом, все мои пользовательские события изначально обрабатываются только одним обработчиком: SystemEventHandler().
Проблема в том, что для каждого отдельного события я должен писать примерно одну и ту же строку:
- { name: kernel.event_listener, event: process_name:event_name, method: handle }
Меняется только process_name:event_name, остальное статично.
Image У меня большое количество мероприятий - 30? 50? 100? Как я могу избежать явного написания новой строки для каждой отдельной строки?
@Cerad Спасибо за ваш комментарий! Я знаю, что вы имеете в виду под «недостатком дизайна», но думаю, здесь дело обстоит не так. Причина в том, что у меня на самом деле несколько Process, каждый процесс может иметь State, а обработчики на самом деле выглядят как App\ProcessHandling\ProcessFoo/StateBar#onEventBuz(...). App\Process\SystemEventHandler\handle(...) - это просто вход / фасад.



