2016-04-02 4 views
0

Ich arbeite an einer ziemlich einfachen Website für Fotogalerien, Nutzer haben die Möglichkeit, über ihr Lieblingsfoto in der Galerie abzustimmen. Ich habe einige Ereignisse eingerichtet, jedes Mal wenn ein Benutzer abstimmt, wird ein VoteCase-Ereignis aufgerufen, das das Vote-Objekt empfängt.Laravel, sollten Events mit der Datenbank kommunizieren?

Das VOTE Objekt besteht aus ...

  • PhotoID
  • voterID

Die Veranstaltung erhält die Abstimmung Objekt und sendet das Foto Inhaber und E-Mail sagen, ihr Foto ausgewählt wurde. Es gibt eine separate AppMailer.php-Klasse zum Senden der E-Mail.

Meine Frage ist, offensichtlich brauche ich einen Nachschlag zu tun, um zu sehen, wer das Foto bereits zu (I gehört zu diesen ($photo->user;) eine beredten Beziehung hat

aber ist, dass die Arbeit der Veranstaltung? A zu tun Datenbankaufruf und Abrufen des Benutzerobjekts, um an den AppMailer zu übergeben? Oder sollte die AppMailer-Klasse das gesamte Ereignis empfangen und den Benutzer selbst durchsuchen?

Es gibt noch ein paar andere Ereignisse, die mit dem Voting verknüpft sind das Voting-Benutzer-Guthaben und möglicherweise das Zuweisen eines "Badge" usw. Jedes von diesen kann zusätzliche DB-Lookups haben. Es ist daher hilfreich, den besten Platz zu kennen, um das zu setzen.

Mir wurde gesagt, dass eine Veranstaltung einem DTO sehr ähnlich ist, aber meine Erfahrung mit ihnen ist nicht existent.

Antwort

0

Hinweis: Dies ist meine Meinung nach nicht die Regel (vielleicht nicht best practice)

Ja, es ist in Ordnung, wenn Sie einen DB-Aufruf in dem Ereignis-Listener zu machen (vorausgesetzt, das ist, wo Sie Ihr Mailer fordern)

  1. auf diese Weise Ihre App-Mailer Klasse Ihrem ORM/DB nicht eng gekoppelt ist und eine Single Responsibility

  2. Du ShouldQueue in Ihrem Event-Listener Removi Umsetzung irgendwelche Leistungsbedenken. (Sie haben Recht?)

+0

Yup ShouldQueue wird vor dem Go-Live implementiert werden! – dangel

Verwandte Themen