Mehrere Eventlistener in services.yml
- D@ve
- Ehemaliges Teammitglied
- Beiträge: 3842
- Registriert: 28.08.2002 19:33
- Wohnort: Bretzfeld
- Kontaktdaten:
Mehrere Eventlistener in services.yml
Macht es von der Performance einen Unterschied, ob man mehrere listener in der services.yml einträgt?
Wird in meinem listener gerade ziemlich voll und unübersichtlich die Idee war es das nach Dateien aufzuteilen vietopic_listener, viewforum_listener etc.
Oder was ist da die best practise?
thx,
Gruß, Dave
Wird in meinem listener gerade ziemlich voll und unübersichtlich die Idee war es das nach Dateien aufzuteilen vietopic_listener, viewforum_listener etc.
Oder was ist da die best practise?
thx,
Gruß, Dave
There are only 10 types of people in the world: Those who understand binary, and those who don't
- Elsensee
- Ehemaliges Teammitglied
- Beiträge: 832
- Registriert: 19.05.2010 15:14
- Wohnort: Hamburg
- Kontaktdaten:
Re: Mehrere Eventlistener in services.yml
Habe mich jetzt etwas in den Symfony-Code eingelesen, der da ausgeführt wird... Oder es versucht... Für mich sah das bloß so aus:
Man trägt es in der services.yml ein -> Symfony -> Magie -> es funktioniert.
Na gut, Spaß beiseite..
Ich kenn das Problem mit einem vollem, großen und langen Event Listener, doch im Gegensatz zu dir, konnte ich noch keine mich zufriedenstellende Aufteilung finden.
Soweit ich das gesehen habe, wird bei mehreren Event Listeners lediglich je einmal mehr eine
Danach passiert die weitere Magie einfach so, als würde alles aus einer Datei kommen.
Zusammengefasst: Die Performance wird im Regelbetrieb vermutlich kaum merklich bis gar nicht darunter leiden. Ich habe auch schon ein paar Extensions gesehen, die den Event Listener auf zwei Klassen aufgeteilt haben.
Man trägt es in der services.yml ein -> Symfony -> Magie -> es funktioniert.

Na gut, Spaß beiseite..
Ich kenn das Problem mit einem vollem, großen und langen Event Listener, doch im Gegensatz zu dir, konnte ich noch keine mich zufriedenstellende Aufteilung finden.

Soweit ich das gesehen habe, wird bei mehreren Event Listeners lediglich je einmal mehr eine
foreach
-Schleife ausgeführt, in der einige relevante Informationen zur Klasse des Event Listeners und sowas ermittelt werden, bevor er dann letztendlich als "SubscriberService
" hinzugefügt wird. Beim Hinzufügen wird jedoch lediglich die in deinem Event Listener durch EventSubscriberInterface
implementierte Funktion getSubscribedEvents()
aufgerufen und die Zugehörigkeit Event-Name => Funktion
gespeichert. (Man kann übrigens in der Funktion getSubscribedEvents()
auch noch ganz andere tolle Dinge machen, um z. B. die Priorität deiner Funktion in der "Aufrufhierarchie" zu ändern...)Danach passiert die weitere Magie einfach so, als würde alles aus einer Datei kommen.

Zusammengefasst: Die Performance wird im Regelbetrieb vermutlich kaum merklich bis gar nicht darunter leiden. Ich habe auch schon ein paar Extensions gesehen, die den Event Listener auf zwei Klassen aufgeteilt haben.

Posts mostly powered by GitHub and phpBB.de Cross-Reference
2015-03-20 - Never forget
2015-03-20 - Never forget

- D@ve
- Ehemaliges Teammitglied
- Beiträge: 3842
- Registriert: 28.08.2002 19:33
- Wohnort: Bretzfeld
- Kontaktdaten:
Re: Mehrere Eventlistener in services.yml
So arbeite ich gerade auch... Symfony/phpBB3.1 ist für mich gerade so ein Puzzle der Erkenntnis. Vieles Sehe ich gerade einfach nur als Blackbox Input => Voodoo => OutputSymfony -> Magie -> es funktioniert.
Ich verstehe nicht warum, es funktioniert, ich verstehe nicht, wie es funktioniert, aber es funktioniert... Aber langsam füllt sich das Puzzle mit Teilen.
Unser Prof hat immer gesagt: "Wenn eine Klasse mehr als 500 Zeilen Code hat, ist es unsauber programmiert" und hat knallhart Punkte abgezogen, wenn man deutlich drüber war...
Auch wenn man das nicht immer 1:1 auf PHP übertragen kann, hat er doch eigentlich recht (ein Kommentar über den phpBB-Code spare ich mir hier besser). Ich hab mir das Limit vor einiger Zeit selber so bei 1000 Zeilen gesetzt und da bin ich jetzt mit meinem Listener und merke schon, dass es unübersichtlich wird.
thanks anyway.
There are only 10 types of people in the world: Those who understand binary, and those who don't
- Elsensee
- Ehemaliges Teammitglied
- Beiträge: 832
- Registriert: 19.05.2010 15:14
- Wohnort: Hamburg
- Kontaktdaten:
Re: Mehrere Eventlistener in services.yml
Ja, ich denke auch, dass Programmierer einfach so arbeiten. Ich las mal, dass eine API für den Programmierer quasi auf Anhieb verständlich sein sollte, aber ich könnte so einfach nicht arbeiten. Ich muss entweder wissen, wie es von innen aussieht, oder, wie du auch, ein Beispiel sehen, in dem das genau beschrieben wird.D@ve hat geschrieben:Ich verstehe nicht warum, es funktioniert, ich verstehe nicht, wie es funktioniert, aber es funktioniert... Aber langsam füllt sich das Puzzle mit Teilen.
Damals bei 3.0 hatte mich der Support an den Code herangeführt. (und auch an die Sprache PHP allgemein



Das ist ein guter Tipp. Danke.D@ve hat geschrieben:Unser Prof hat immer gesagt: "Wenn eine Klasse mehr als 500 Zeilen Code hat, ist es unsauber programmiert" und hat knallhart Punkte abgezogen, wenn man deutlich drüber war...
Auch wenn man das nicht immer 1:1 auf PHP übertragen kann, hat er doch eigentlich recht (ein Kommentar über den phpBB-Code spare ich mir hier besser). Ich hab mir das Limit vor einiger Zeit selber so bei 1000 Zeilen gesetzt und da bin ich jetzt mit meinem Listener und merke schon, dass es unübersichtlich wird.

Mein Listener hat jetzt fast 800 Zeilen und es wird schon echt schwierig, da durchblicken, aber ich dachte bisher das würde nur an mir oder meinem Setup liegen, welches zum Programmieren eigentlich echt nicht das Beste ist.. :/
Und beim phpBB-Code hat sich das in den Klassen meist schon verbessert. Die includes/functions.php ist natürlich noch immer zu heavy..

Posts mostly powered by GitHub and phpBB.de Cross-Reference
2015-03-20 - Never forget
2015-03-20 - Never forget

- tas2580
- Ehemaliges Teammitglied
- Beiträge: 3029
- Registriert: 01.07.2004 05:42
- Wohnort: /home/tas2580
- Kontaktdaten:
Re: Mehrere Eventlistener in services.yml
Warum nicht einfach eigene Klassen/Funktionen anlegen die man dann im Listener nur aufruft? Ich habe das jetzt schon bei mehreren Extensions gesehen, da gibt es dann einen Ordner "core" oder "src" in dem für jedes Event eine eigene Datei liegt, der Listener ruft dann nur noch beim jeweiligen Event die passende Funktion/Methode auf. So kann man seinen Code schön aufteilen und hält den Listener klein und übersichtlich.
Ich würde die Größe einer Funktion nicht an der Anzahl der Zeilen fest machen denn das hängt mir irgendwie zu arg vom Programmierstiel ab. Die einen schreiben
Gruß Tobi
Ich würde die Größe einer Funktion nicht an der Anzahl der Zeilen fest machen denn das hängt mir irgendwie zu arg vom Programmierstiel ab. Die einen schreiben
{
in eine neue Zeile und andere schreiben es in die gleiche Zeile, durch solche Dinge kann sich die Anzahl der Zeilen schnell erhöhen. OK bei phpBB ist das durch die Coding Guidelines alles geregelt, aber wenn du deinen 1000 Zeilen Code neu formatierst kann es gut sein das du nur noch 600 Zeilen hast was dann ja besser sein soll obwohl es der gleiche Code ist. Ich kenne zwar die Regel mit 500 Zeilen, verfahre da aber eher nach der Unix-Philosophie
Also Funktionen so oft es geht aufteilen und Sinnvoll in Klassen zusammenfassen, wie viele Zeilen sie haben ist da eher nebensächlich. Oft führt das aber automatisch dazu das man nicht über 500 Zeilen kommt denn um eine Sache zu machen braucht man selten mehr wie 500 Zeilen Code.Douglas McIlroy hat geschrieben:Schreibe Computerprogramme so, dass sie nur eine Aufgabe erledigen und diese gut machen.
Gruß Tobi
Heute ist ein guter Tag um dein Forum zu testen.
Ehemaliger Benutzername: [BTK] Tobi
Ehemaliger Benutzername: [BTK] Tobi
- D@ve
- Ehemaliges Teammitglied
- Beiträge: 3842
- Registriert: 28.08.2002 19:33
- Wohnort: Bretzfeld
- Kontaktdaten:
Re: Mehrere Eventlistener in services.yml
Ja klar ist das Stil... Sauberer Stil und nicht-sauberer Stil.Ich würde die Größe einer Funktion nicht an der Anzahl der Zeilen fest machen denn das hängt mir irgendwie zu arg vom Programmierstiel ab
An der Uni lernst Du wirklich Hard-Core-OOP... So wie man es eigentlich richtig macht. Und da schachtelt man alles ab. Eine Klasse hat dann manchmal auch eben nur zwanzig dreißig Zeilen. Aber das führt zu extrem übersichtlichem und leicht-verständlichem Code. Weil Du sofort verstehst, was die Klasse macht.
Um das mal zu verdeutlichen. Hab mir für phpBB mal ein Mini-Framework für Formulare gebastelt. Das sieht dann so aus.
Code: Alles auswählen
$this->message_TXT = new text_box($this);
$this->message_TXT->rows_INT = 5;
$this->message_TXT->text_STR = $user->lang['MESSAGE'];
$this->message_TXT->style_OBJ->width_INT = 300;
$this->message_TXT->is_required_BLN = true;
$this->newsletter_CHK = new checkbox($this);
$this->newsletter_CHK->text_STR = $user->lang['NEWSLETTER'];
$this->newsletter_CHK->create_item($user->lang['NEWSLETTER_SUBSCRIBE'], 1);
$this->captcha_OBJ = new captcha($this);
$this->captcha_OBJ->text_STR = $user->lang['CONFIRM_CODE'];
$this->captcha_OBJ->description_STR = $user->lang['RECAPTCHA_EXPLAIN'];.
.
.
Ist zwar noch nicht perfekt. Aber dafür, dass ich das mal an einem Nachmittag runtergeschrieben hab, klappt das gut. Programmieren geht dann auch wesentlich schneller, weil man immer nur kleine Einheiten hat.
Wenn ich mir da gerade anschaue, was ich da heute an der viewtopic rumgeschraubt habe um ein paar URLs umzuschreiben

Eigentlich könnte die viewtopic ein Zehnzeiler sein:
Code: Alles auswählen
.
.
.
if ($post_id_INT)
{
$topic_OBJ = Topic::load_by_post_id($post_id_INT, $start_INT, $sort_STR);
}
elseif($topic_id_INT)
{
$topic_OBJ = Topic::load_by_topic_id($post_id_INT, $start_INT, $sort_STR);
}
$topic_OBJ->render();
Jede Klasse hat eine render() Methode, die den HTML-Code ins Template schreibt. Die Topic->render ruft dann jeweils die render Methoden von posting auf usw.
Am Ende hat man dann zwar ein paar Dateien mehr als jetzt, aber man hat nicht mehr diese 3000-Zeilen-Trümmer, wo man erstmal drei Wochen studieren muss, um zu kapieren, was die überhaupt alles machen. Man blickt sofort was Sache ist, denn so ein Avatar-Objekt, kennt seine URL, weiß wie groß es ist und es kann dies an die Außenwelt kommunizieren. Sie hat nur eine handvoll Methoden (upload, delete, render) und sonst nichts...
Zuletzt geändert von D@ve am 09.01.2015 05:24, insgesamt 2-mal geändert.
There are only 10 types of people in the world: Those who understand binary, and those who don't
- D@ve
- Ehemaliges Teammitglied
- Beiträge: 3842
- Registriert: 28.08.2002 19:33
- Wohnort: Bretzfeld
- Kontaktdaten:
Re: Mehrere Eventlistener in services.yml
ooops. hab mich offtopic etwas in Rage geredet... Schon spät...
Aber PHP ist deswegen so als Frickler-Sprache verschrieen und wird im Unternehmensumfeld so gut wie garnicht mehr eingesetzt, weil dieses OOP-Bewusstsein einfach bei den meistens Entwicklern garnicht da ist.
Würde mich aber freuen, wenn phpBB-Entwickler dieses Bewusstsein für OOP etwas mehr entdecken würden. Das würde vieles vereinfachen... Aber das ist schwer. Merke das ja auch bei mir... - es geht ja auch ohne... irgendwie... einigermaßen... und mit viel Gehacke und schlaflosen Nächten.
Und jetzt gute Nacht...


Aber PHP ist deswegen so als Frickler-Sprache verschrieen und wird im Unternehmensumfeld so gut wie garnicht mehr eingesetzt, weil dieses OOP-Bewusstsein einfach bei den meistens Entwicklern garnicht da ist.
Würde mich aber freuen, wenn phpBB-Entwickler dieses Bewusstsein für OOP etwas mehr entdecken würden. Das würde vieles vereinfachen... Aber das ist schwer. Merke das ja auch bei mir... - es geht ja auch ohne... irgendwie... einigermaßen... und mit viel Gehacke und schlaflosen Nächten.
Und jetzt gute Nacht...
There are only 10 types of people in the world: Those who understand binary, and those who don't
- tas2580
- Ehemaliges Teammitglied
- Beiträge: 3029
- Registriert: 01.07.2004 05:42
- Wohnort: /home/tas2580
- Kontaktdaten:
Re: Mehrere Eventlistener in services.yml
Würde ich so nicht sagen, wichtig ist nur das man einen einheitlichen Stiel hat.D@ve hat geschrieben:Ja klar ist das Stil... Sauberer Stil und nicht-sauberer Stil.
Wenn du so ein Fan von OOP bist dann nutze es doch auch

Ein Listener könnte dann so aussehen:
Code: Alles auswählen
static public function getSubscribedEvents()
{
return array(
'core.foo_event' => 'foo_function',
'core.bar_event' => 'bar_function',
);
}
public function foo_function($event)
{
$my_class->foo();
}
public function bar_function($event)
{
$my_class->bar();
}
Gruß Tobi
Heute ist ein guter Tag um dein Forum zu testen.
Ehemaliger Benutzername: [BTK] Tobi
Ehemaliger Benutzername: [BTK] Tobi
- nickvergessen
- Ehrenadmin
- Beiträge: 11559
- Registriert: 09.10.2006 21:56
- Wohnort: Stuttgart, Germany
- Kontaktdaten:
Re: Mehrere Eventlistener in services.yml
Also ich splitte meine Listener so auf, dass es Sinn macht.
Die Performance ob jetzt 1 oder 5 Listener aus deiner Extension geladen werden ist vernachlässigbar.
Die Performance ob jetzt 1 oder 5 Listener aus deiner Extension geladen werden ist vernachlässigbar.
kein Support per PN
- D@ve
- Ehemaliges Teammitglied
- Beiträge: 3842
- Registriert: 28.08.2002 19:33
- Wohnort: Bretzfeld
- Kontaktdaten:
Re: Mehrere Eventlistener in services.yml
Naja für mich ist das noch eine Blackbox... Hätte ja sein können, dass da SQL-Queries gemacht werden...
Gruß, Dave
Gruß, Dave
There are only 10 types of people in the world: Those who understand binary, and those who don't