hi,
Wenn ich Dich vorher richtig verstanden habe geht das doch in die Richtung des STM!? Oder hab ich das falsch verstanden?
Im Prinzip ja, irgendwie ist das alles ähnlich. STM konsequent nutzen ist die Herangehensweise vom Ergebnis/Ausgabe her, im ersten Schritt werden mögliche Ausgabeseiten (Zustände) skizziert und darauf setzt das Programm dann auf. Freilich gibt es dazu auch Kontrollfunktionen, nuhr, die stehen halt nicht obendran (1). Kontrolliert werden hauptsächlich die Benutzereingaben, alles Andere, also die Ausgabe geht dann sozusagen automatisch am Stück.
(1) Bei meinen CGIs steht obendran eine Kontrollstruktur, in welcher die zu erwartenden Parameter abgehandelt werden. Danach leiten sich die möglichen Zustände ab, eine HTML-Seite wird blockweise erzeugt jedoch immer mit dem ResponseObject. Funktionen, die Eingaben prüfen, geben ein Objekt zurück, was den Zustand beschreibt. Sofern Eingabeprüfungen auch in anderen Anwendungen wiederkehrende Routinen sind, baue ich die in die Basiklasse ein. Dann kriegt die Prüffunktion gleich das ResponseObject bzw. wird damit aufgerufen, ist eine Object-Method und baut die entsprechenden Attribute ein sowie den State->Zustand->OK->Seite kann raus oder es ergibt sich ein anderer Zustand. Einen Frontend-Controler im Sinne einer ZentralUnit gibt es bei mir nicht.
Auf jeden Fall passt OOP ganz gut auf CGI-Aufgaben, wie gesagt, _ein_ Objekt für die Ausgabe, entweder eine komplette Seite oder eine AjaxResponse kann mit diesem einen Objekt erzeugt werden. Im ResponseObject stecken alle Atribute für eine HTML-Seite wie title, meta-descr, author usw. sowie weitere Attribute für den zu erstellenden Body. Bei Ajax gehen nur letztere raus, die Seite ist ja schon da, nur das Ergebnis ist da noch einzubauen. Perl kommt der Sache entgegen, ein ResponseObject wird bei mir später so aussehen:
bisher alles in Einem aber flache Struktur:
$ro->{title};
$ro->{descr}; usw.
$ro->{uhrzeit_als_Beispiel}
später auch alles drin, aber unterteilt in HTML und AJAX:
$ro->{HTML}->{title} = 'foo';
$ro->{HTML}->{descr} = 'bar';
$ro->{AJAX}->{uhrzeit_als_Beispiel}
Das macht das Löschen einfach, für Ajax wird mit
delete $ro->{HTML};
alles rausgeschmissen, was nicht gebraucht wird, dann serialisiert und ab als Response.
Hotti