Laravel, должны ли события общаться с базой данных?

Я работаю над довольно простым сайтом для фотогалерей, пользователи имеют возможность голосовать за свои любимые фото в галерее. У меня есть некоторые события, настраиваемые каждый раз, когда пользователь голосует, вызывается событие VoteCase, которое получает объект голосования.

ГОЛОС объект состоит из …

  • регистрационный номер фото
  • voterID

Событие получает объект голосования и отправляет владельцу фотографии и электронное письмо о том, что их фотография была выбрана. Существует отдельный класс AppMailer.php для отправки электронной почты.

Мой вопрос, очевидно, мне нужно сделать поиск, чтобы увидеть, кому принадлежит фотография (у меня уже есть красноречивые отношения для этого ($photo->user;)

Но это работа мероприятия? Чтобы сделать вызов базы данных и получить объект пользователя для передачи в AppMailer? Или класс AppMailer должен получить событие целиком и выполнить поиск самого пользователя?

Есть еще несколько событий, связанных с голосованием. увеличение количества голосов, предоставление права голоса голосующему пользователю и, возможно, назначение «значка» и т. д. Каждый из них может иметь дополнительные поиски в БД. Так что знание лучшего места для этого полезно.

Мне сказали, что событие очень похоже на DTO, но мой опыт с ними отсутствует.

0

Решение

Примечание: это мое мнение, а не правило (возможно, не лучшая практика)

Да, это нормально для вас сделать вызов БД в прослушивателе событий (при условии, что именно там вы вызываете свою почтовую программу)

  1. Таким образом, ваш класс почтовой программы не будет тесно связан с вашей ORM / DB и имеет Единственная ответственность

  2. Вы внедряете ShouldQueue в слушателе событий, устраняя любые проблемы с производительностью. ( Вы правы? )

0

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

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

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