dedlfix: CGI mit Ajax-Erweiterung (Design Patterns)

Beitrag lesen

Hi!

Frage nach der Best Practice und einem passenden Entwurfsmuster.

Best Practice ist, Fachbegriffe richtig zu verwenden und nicht nach Gutdünken.

am Besten ein einfaches Beispiel: ein CGI hat zwei Eingabefelder, Faktor 1, Faktor 2, einen Submit-Button und auf Klick wird das Produkt berechnet. Das CGI hat eingangs eine Kontrollstruktur, in welcher die Parameter abgefragt werden,

CGI ist der Name einer Schnittstelle zwischen Webserver und Programmen, die den Request verarbeiten sollen. Es ist somit kein Ding, das Eingabefelder oder Kontrollstrukturen haben kann.

für einen reinen CGI-Betrieb wird [...]
Ajax-Erweiterung: [...]

Wie glaubst du wohl, kommt der Ajax-Request zu deinem Perl-Script, wenn nicht ebenfalls über die CGI-Schnittstelle?

Die Berechnung des Produkts (abstrakt: Verarbeitung der Eingabe) wird in beiden Fällen fällig. Und nicht nur das: In beiden Fällen landet das Ergebnis (f1, f2, produkt) kurzzeitig in einunddemselben Objekt. Es könnte also auch so gemacht werden, dass es nur den einen Parameter 'berechne' gibt, das Objekt jedoch ein Flag bekommt (ajax=1 || ajax=0).

Je nach vertretbarem Aufwand kann man da verschiedene Wege gehen. Im einfachsten Fall kommt die Berechnung unabhängig von irgendwelchen Rahmenbedingungen des Requests in eine Funktion - Parameter rein, Ergebnis raus. Das Script unterscheidet je nach Gegebenheiten (Ajax oder nicht) ob Eingabedaten unterschiedlich entgegengenommen werden müssen und bringt sie gegebenenfalls für die weitere Verarbeitung - die ja in beiden Fällen gleich ist - auf einen gemeinsamen Nenner. Die Berechnung erfolgt in der Funktion. Anschließend wird wieder entschieden, welche Response zu generieren ist. - OOP braucht man dazu im Prinzip nicht, das Entwurfsmuster wäre schlicht und einfach EVA.

Komplexer geht immer, beispielsweise über MVC - dann müsste aber die gesamte Webanwendung so aufgebaut sein, damit es sich lohnt. Ein Controller hat zwei Actions, eine für Ajax, eine für "normal". Die View für "normal" ist eine komplette HTML-Seite, für Ajax ist das Ergebnis so überschaubar klein, dass es vielleicht nicht mal eine eigene View braucht und die Controller-Action es generieren kann.

Lo!