Как правильнее создавать EventSubscriber?

Допустим, у меня есть сущность Employee. И в контроллере, при создании нового сотрудника я отправляю событие
$this->eventDispatcher(new EmployeeCreatedEvent());

Теперь я хочу при создании сотрудника отправлять в общий канал в слак уведомление о том, что у нас в компании новый сотрудник. Встречайте его и тд.
Для этого я в компоненте со слаком подпишусь на это событие и буду слать сообщение.
У меня вопрос, как правильно должен подписчик выглядеть?
Вариант 1: подписчик называется EmployeeCreatedSubscriber и содержит в себе метод отправки сообщения. И это кажется мне логичный, ведь это именно подписчик, в значит он должен подписываться на конкретное событие. Наверное на одно.
Вариант 2: подписчик называется GreetingsMessageSubscriber. Внутри он подписан на EmployeeCreatedEvent и на другие события, если они есть. Он отправляет сообщения с приветствием и подписан на все события, при наступлении которых нужно слать сообщение в слак.
Короче, в первом случае подписчик обрабатывает ровно одно событие, во втором группу событий.
Какой вариант используете вы и как на ваш взгляд правильно?
  • Вопрос задан
  • 285 просмотров
Решения вопроса 2
По использованию выражений из аббревиатуры CRUD в названиях событий бизнес-логики я предположу, что приложение относительно не сложное, а события не будут переиспользованы. Если вы не собираетесь вешать на это событие нескольно обработчиков, то рекомендую не усложнять и просто убедиться, что друг от друга отделена логика контроллера, отправки сообщений и хранения шаблонов.

Пример использования системы подписок в Symfony можно в подсмотреть в системе валидации. Там как раз и переиспользование событий в их собственной системе, и точки, к которым можно подсоединиться пользовательским кодом.
Ответ написан
Комментировать
@v__V__v
Разработчик
Все просто: если у вас только одно такое событие, то делается обработчик исключительно для него, если у вас есть группа схожих событий, то обработчик делается на всю группу. В вашем случае, если судить по названиям, приветствий по разным поводам будет много, так что логично сделать GreetingsMessageSubscriber. Более того, есть подозрение, что вам лучше вообще сделать MessageSubscriber, который будет ловить все события, требующие отправки сообщений в слак, т.к. действия будут одни и те же, разница только в уходящем тексте.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы