# Ereignisgesteuerte Programmierung



## maximilius (8. Mai 2009)

Ich beziehe mich auf einen Online-Artikel:
Ereignisgesteuerte Programmierung in PHP || IT-Republik - PHP - Artikel

Es geht im Artikel um PHP, meine Frage ist aber Programmiersprachenunabhängig.

Im Artikel wird vorgeschlagen, einen Login erweiterbar zu programmieren in Form eines Vermittler-Entwurfsmusters.
Dabei löst die Login-Komponente ein Ereignis aus, wleches über den Vermittler an andere Komponenten weiter geleitet wird:





In der Abbildung sind mehrere Komponenten zu sehen.

Die eine Komponente schreibt Logfiles. Sie soll mitloggen, wenn ein erfolgreicher oder auch wenn ein abgewiesener Login durchgeführt wurde.
Eine andere Komponente kontrolliert die IP-Adresse des Benutzers und sperrt ggf. den Zugriff. (Verbietet den Login)

Jetzt zu meiner Frage:
Wie kann ich mit der Lösung sicherstellen, dass die Loginkomponente auch den tatsächlichen Status mitloggt?
Es kann ja sein, dass der Vermittler zuerst die logfileschreibende Komponente aufruft und danach die IP-Überprüfende, die den Login zurücksetzt.
Dann würde im Logfile ein Erfolg geloggt werden, obwohl dies nicht der Fall ist.

lg Stephan


----------



## HoaX (8. Mai 2009)

Der Dispatcher könnte bei allen drei Aktionen erst nacheinander before(...), dann perform(..) und zum Ende dann after(...) aufrufen.


----------



## maximilius (8. Mai 2009)

Das ist eine sehr gute Idee.
Vielen Dank!

Reichen da nicht sogar schon before() und after() aus?

Mir fällt gerade ein, dass man das Ereignis ja auch in zwei Ereignisse aufspalten könnte:
1) LoginAttempt
2) LoginSuccess

Dann könnte man die IP-Kontrolle auf LoginAttempt anmelden und die Logkomponente auf LoginSuccess.

lg Stephan


----------

