EventHandler

Dieser Bereich dient dazu, neue Features zu diskutieren und für die Entwicklung zu dokumentieren. // This area is dedicated to new features including proposals and documentation.
Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

EventHandler

Beitrag von Screeze » 08.07.2011, 13:18:33

Da in diesem Thread viewtopic.php?f=11&t=754 bereits mehrfach festgestellt wurde, dass eine Art Event System ziemlich praktisch wäre, um mehrere Erweiterungen oder Komponenten miteinander arbeiten zu lassen, ohne zirkuläre Abhängigkeiten zu schaffen, lager ich diese Idee einfach mal als Feature Wunsch aus.

Die Idee wäre, ein Basis Eventsystem ins APF zu integrieren, bei dem sich beliebige Handler registrieren können, welche ausgeführt werden, wenn das entsprechende Event ausgelöst wird. Das ganze könnte ähnlich den Javascript Events funktionieren.

Beispiel:
Kategoriemodul will eine Kategorie löschen. Es weiß aber nicht welche anderen Module das Modul verwenden, und kann daher keine Abhängigkeiten löschen. Beispielsweise könnte ein Blogmodul die Kategorien verwenden. Registriert sich das Blogmodul jedoch für das Event "CategoryManager.deleteCategory" und das Kategorie Modul feuert dieses Event vor dem löschen, kann das Blogmodul entscheiden was passieren soll, z.B. die Verbindung von Beiträgen zu der übergebenen Kategorie löschen, und einer Standardkategorie zuordnen.

Wie könnten wir das möglichst generisch Umsetzen? Es ist nötig dass Parameter übergeben werden können. Ich würde vorschlagen es wird ein Array aus Parametern übergeben, dann können wir beliebig viele Parameter unterstützen indem die alle in das Array gesteckt werden.

Well
Beiträge: 263
Registriert: 25.10.2009, 11:00:19
Wohnort: Beuren
Kontaktdaten:

Re: EventHandler

Beitrag von Well » 09.07.2011, 00:57:39

Käme das nicht an das Event-Dispatcher-Pattern heran(?) (Zum Thema generische Lösung)

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: EventHandler

Beitrag von Screeze » 09.07.2011, 11:35:47

Ich hab sicherheitshalber nochmal in meinem schlauen Buch nachgelesen, aber jap, es ist das Event-Dispatcher-Pattern.

Die dortige Implementierung sieht vor:
Ein EventHandler Interface,
ein Event-Objekt
ein EventDispatcher-Objekt

Wobei auch das Abbrechen eines Events realisiert wurde, was ich für sinnvoll halte.

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: EventHandler

Beitrag von Megger » 09.07.2011, 13:36:01

Die Speicherung eines Events sollte man auch berücksichtigen (wenn nicht schon daran gedacht wurde) Ich könnte mir nämlich vorstellen, mit dem System mehrere Systeme zu synchronisieren, allerdings sind nicht immer alle Systeme online, und so wäre es von Vorteil, wenn die Events gespeichert werden und man diese nachträglich abarbeiten kann
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15


Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: EventHandler

Beitrag von Megger » 09.07.2011, 13:42:02

Naja im Grunde wird ja ein Event ausgelöst und andere Module können auf so ein Event reagieren, es sollte einfach optional möglich sein, diese Events mit einer Zeitangabe zu speichern, sodass man später diese Events nacheinander abarbeiten kann. Der Eventhandler feuert dann sozusagen diese gespeicherten Events nacheinander speziell für das Modul.
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: EventHandler

Beitrag von Screeze » 09.07.2011, 14:10:23

Und woher soll er wissen wann er ein event speichern/feuern/wieder löschen soll?


Was übrigens sinn machen würde noch:
Wenn man Events wie BlogModule.delete feuert, dass man auch eventhandler nur auf BlogModule setzen kann, und dieser dann alle sub-events auch bekommt.

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: EventHandler

Beitrag von Megger » 09.07.2011, 14:36:18

Mhh das speichern der Events würde ich vielleicht der einfachheit halber global machen, sodass man dies irgendwo einstellt und alle Events werden gespeichert. Ist ja auch nur für spezielle Anwendungsfälle geeignet.
Spezielle Events nur für spezielle Module klingt auch sehr gut
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: EventHandler

Beitrag von dr.e. » 09.07.2011, 15:11:48

Hallo zusammen,

das Feature klingt gut. Was es allerdings noch zu klären gilt ist der Gültigkeitsraum von Events. Ist es der Request, die Session oder gar eine persistente Datenbank. Sofern intelligent implementiert, kann es je nach Setup alles sein (realisierung per DI-Container + entsprechendes Storage-Interface).

Im EventHandler sollte dann aber auch eine Möglichkeit implementiert werden, bei der Registrierung Events an den Aufrufer zurück zu feuern, wenn das Event schon vorher ausgelöst wurde. Andernfalls ergeben sich Timing-Probleme.

Mit der Gültigkeit Session könnt beispielsweise auch das forwardmessage-Modul ein wenig eleganter implementiert werden.

Wer erstellt ein Proposal zu den Komponenten und Interfaces?
Viele Grüße,
Christian

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: EventHandler

Beitrag von Screeze » 09.07.2011, 17:07:58

Ich dachte zwar nur an einen ganz simplen Singleton ohne Session oder persistente Speicherung, aber alles 3 können wir natürlich auch anbieten :D
Ich bin momentan noch etwas beschäftigt, entweder jemand schreibt das Proposal schonmal, oder ich kanns in einigen Tagen machen eventuell. (sofern mir nix dazwischenkommt)

Well
Beiträge: 263
Registriert: 25.10.2009, 11:00:19
Wohnort: Beuren
Kontaktdaten:

Re: EventHandler

Beitrag von Well » 09.07.2011, 17:37:03

Ich hab sicherheitshalber nochmal in meinem schlauen Buch nachgelesen,
Offtopic: "PHP Design Patterns"? :D


Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: EventHandler

Beitrag von Megger » 11.07.2011, 11:45:23

Und woher soll er wissen wann er ein event speichern/feuern/wieder löschen soll?
Automatisiert löschen würde ich es nicht, da der Programmierer entscheiden muss, wann es wieder gelöscht wird (nur eine Methode anbieten, mit der sich ein gespeichertes Event löschen lässt)

Beim "feuern" von Events sollte der Empfänger in diesem speziellen Fall der Auslöser sein, also

Code: Alles auswählen

$eventhandler = new EventHandler();
$eventhandler->register($me);
$eventhandler->readyForEvents($myLastOnlineTime);
 
So in dem Dreh! Oder soll der Eventhandler wissen, wann der Client zuletzt Events empfangen hat? Mein Denken zielt vorallem darauf aus, Events übers Inet zu verschicken und dadurch zwei Systeme zu synchronisieren, wobei eins der beiden Systeme nicht 24 Stunden / Tag online ist und auch keine feste IP hat
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: EventHandler

Beitrag von Screeze » 11.07.2011, 12:33:05

Hm das geht aber garnichtmehr in die Richtung die wir bräuchten :D

und den client löschen lassen is auch doof: wenn ein eventhandler das event löscht - was ist mit den anderen die eventuell noch registriert sind?

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: EventHandler

Beitrag von Megger » 11.07.2011, 12:45:39

Nein, ich meine nicht, dass der Client die Events löscht, sondern dass der Programmierer entscheiden muss wie diese gespeicherten Events gelöscht werden. Man könnte auch eine Zeitangabe in einer Konfigurationsdatei hinterlegen und wenn ein Event älter als die Angabe ist, dann wird es gelöscht!

Das nachträgliche "feuern" von Events gefällt mir so wie ich es beschrieben habe auch noch nicht!
Hm das geht aber garnichtmehr in die Richtung die wir bräuchten :D
Da hast du vielleicht recht, ist halt schon ein ziemlich spezieller Anwendungsfall, aber vielleicht könnte man das ganze variabel gestalten? Also eine Standardfunktionalität anbieten und wenn man etwas anderes braucht, dann leitet man es ab und überschreibt die Methode oder aber registriert einen anderen Provider (finde ich sinnvoller, da man so für unterschiedliche Module den gleichen Eventhandler nutzen kann, aber verschiedene Provider)
So hätte der Programmierer auch die Möglichkeit ein Event noch nach eigenem Ermessen zu beeinflussen, d.h. ich könnte ein gefeuertes Event z.B. in einem SOAP Aufruf verpacken und hätte somit meine Funktionalität um entfernte Systeme miteinander kommunizieren zu lassen
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Gesperrt

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast