Tatsächlich ist a) gefährlich, vergesse ich nämlich beim nächsten Projekt die "Zentral-Begin-Validierung" und schiebe "sub XXX" etwas böses unter, dann knallt es womöglich.
Man kann sich immer selbst besiegen, ebenso wie man ein HTML Dokument ohne Doctype schreiben kann.
Also _muss_ "sub XXX" selbst die Integrität der Daten prüfen.
Dann ist es kein sub, sondern ein autarkes selbstverantwortliches Ding mit seinem eigenen EVA Prinzip, das irgendwo im Netz betrieben wird.
Unter einer sub verstehe ich etwas, das im Namensraum eines Chefs sitzt.
Wenn ich das CGI Modul verwende, dann hole ich mir ziemlich viel in den Namensraum. wenn ich jede sub jungfräulich immer wieder neu auf $cgi->param zugreifen lasse, habe ich zwar pseudojungfräuliche Daten. Ich muss sie dann aber doch nach einem zentralen Schema validieren, bevor ich die Daten benutzen kann. Wenn eine sub findet "Ich erfinde jetzt andere Gesetze", dann hat das in diesem Namensraum nichts mehr zu suchen.
Aus diesem Grund ist es das masterscript allein, das hand an CGI Daten legen darf. Module werden nur über das Masterscript bedient, und Daten nur vom Masterscript wieder empfangen. Aber es ist unmöglich, dass ein Modul eigenständig den CGI Input parst und validiert und dann etwas unterschieben will.
Ich meine, dass ist eine Frage der policy, die man sich innerhalb einer Sprache aneignet.
Wenn du quer über Sprachen , Prozesse und Userrechte programmierst, dann hast du allerdings überall dein eigenes EVA prinzip zu erfolgen, wobei du dann dennoch eine gemeinsame Semantik, einen übersprachlichen Standard pflegen musst.
Tatsächlich dürfte Version b) geeignet sein für verzweigte Anwendungen quer durch verschieden Autoren Sprachen und Datei-Rechte. Aber ich halte es für sinnlos aufwändig und zerfleddert, wenn wir einen CGI Context unter einer Domäne und einer Sprache vor Augen haben.
Der nächste Punkt ist.
Validierung hat weniger damit zu tun, über möglichen Spamangriffen zu brüten. Es hat damit zu tun, dass Usereingaben in eine kanonische Form gebracht werden. Dieser Vorgang selbst kann für ein Feld komplexer werden, und verdient deshalb, zentral behandelt zu werden. Usereingaben stehen unter keinem Kulturgüterschutz. Sie wurden in Anlass einer Anwendung, einer API getätigt. Und eine API kann diese Eingaben normalisieren oder kanonisieren, bzw eine errormessage auf eine queue setzen.
War diessen vorgang in eng angebunden Bestandteile (subs oder module) mehr als einmal abdelegiert, befindet sich im Spaghetticode einer anderen Dimension.
mfg Beat
><o(((°> ><o(((°>
<°)))o>< ><o(((°>o
Der Valigator leibt diese Fische