2012-11-05 21 views
5

Ich habe einige Anleitungen/Tutorials über Symfonys Event System gelesen. Aber ich bin mir immer noch nicht sicher über die Benennung Best Practice. Leider verwenden die meisten Dokumentationen Standardszenarien wie Login, usw. Hier ist ein Beispiel aus einem Spiel:Benennung von Listenern in Symfony2

Ein Befehl bewertet eine Art von Übereinstimmungsergebnis. Sie feuert ein entsprechendes Ereignis wie folgt aus:

$dispatcher->dispatch('game_bundle.match_won', new MatchWonEvent($match, $winner)); 

Jetzt habe ich mehrere Zuhörer zu behandeln dieses Ereignis, wie zum Beispiel einer für dieses Posting auf dem Siegerfacebook-Seite und ein weiteres Buch einen Erfolg für den Gewinner registrieren möchten. In den Beispielen habe ich festgestellt, dass der Listener, der das Login-Ereignis behandelt, hauptsächlich als etwas wie LoginListener bezeichnet wurde, aber sollte sich dieser Name nicht auf die tatsächliche Verwendung beziehen, anstatt auf das Ereignis, auf das er bezogen ist? Weil ich jetzt in meinem Beispiel eine MatchWonListener benötige, aber sollte diese sowohl die Facebook- als auch die Leistungslogik enthalten? Das würde das Ereignissystem dann nutzlos machen ... Wäre es nicht besser, einen FacebookListener mit einem onMatchWon($event) und einen AchievementListener mit seiner eigenen onMatchWon($event) Methode zu haben? Dies würde es auch leicht machen, mehr Facebook-bezogene Ereignisse in die FacebookListener zum Beispiel hinzuzufügen.

Ich bin verwirrt über die Benennung in den Proben und nicht sicher über jetzt. Habe ich es total falsch verstanden?

Antwort

2

Es gibt kein "Best Practice" zum Benennen von Ereignissen. Wenn Sie jedoch den Listener nach dem Ereignis benennen, wird der Zweck der Ereignisse nach meinem Dafürhalten komplett zunichte gemacht. Das Ziel besteht darin, verschiedene Teile Ihres Systems miteinander interagieren zu lassen, ohne Probleme zu lösen und zu mischen.

Also, wenn man bedenkt, dass Sie so weit gegangen sind, Ereignisse zu erstellen, um Probleme zu trennen, warum sollten Sie dann alle verschiedenen Logiken in einen Listener mischen? In diesem Fall können Sie auch einfach einen direkten Anruf tätigen, anstatt ein Ereignis zu versenden.

Ich bin persönlich gegen Namen wie "onMatchWon", weil das nicht beschreibt, was die Methode tut. Angenommen, Sie möchten ein gewonnenes Event hören und die Erfolge des Benutzers, der gewonnen hat, aktualisieren. Ich hätte wahrscheinlich einen Benutzer-Manager-Dienst oder die Sortierung mit einer Methode updateAchievements(MatchWonEvent $event). Aber ich denke, das ist eher Geschmackssache oder Konvention, wenn Sie dazu bereit sind.

+0

Ich wollte die Listener-Klasse nach dem allgemeinen Zweck ('FacebookListener',' AchievementListener') und die tatsächliche Methode, die für das Ereignis 'onMatchWon' aufgerufen wird. Weil das nichts koppeln würde (immer noch leicht erweiterbar mit komplett neuen Listenern. Der große Vorteil ist, dass es nicht viele direkte Aufrufe in der Methode geben muss, wenn die Veranstaltung abgesendet wird. Anders herum, wie Sie es vorgeschlagen haben, würde ich nicht weiß, wie man die Zuhörer anruft, weil mehrere Zuhörer (in Bezug auf Errungenschaften, Facebook, ...) dann "MatchWonListener" heißen würden. –

+0

Nein, das habe ich nicht vorgeschlagen, genau das habe ich versucht, die Leute davon abzuhalten. Ich habe gesagt, dass es keine Konvention gibt, aber einen 'MatchWonListener' zu haben, scheint ziemlich dumm zu sein. Ich denke, was du 'wolltest' ist ok, ich mag es nicht, Klassen 'Listener' zu nennen, weil sie wissen, wann sie ' Re genannt werden, was ich zu vermeiden versuche, aber alles in allem ist nicht so schlimm, und wie gesagt, ist eher eine Frage des Geschmacks. – fd8s0

+0

Ah ok! Also ich war gar nicht so falsch. ;-) Vielen Dank ! –

Verwandte Themen