hotti: Trennung DAL?AL

Beitrag lesen

Hi!

Um das als nicht wirklich zielführend zu erkennen, muss man die PHP-Interna und die MySQL-Client-API-Arbeitsweise ein wenig kennen. Das Ergebnis einer Query liegt üblicherweise sowieso im Hauptspeicher, [..]

Wow, mein Lieber, das ist wirklich interessant, vielen Dank für die Infos!!

In der Hoffnung, dass Dich/Euch das auch ein bischen interessiert: Mittlerweile habe ich fürs Loggen meiner Seitenzugriffe eine neue Klasse geschrieben in Perl, so läuft nun ein Insert über einen gebundenen Hash, dem werden einfach die Werte zugewiesen. In der Klasse (Vermittlungsschicht, 'TieLog') gibt es dazu die Method TIEHASH{} und die Public-Method write{}.

Es ist das Erstemal, dass ich in Perl eine Klasse (Moduldatei) schreibe, in der es neben TIEHASH auch Method TIEARRAY gibt und freilich gibt es auch die Method new(). Es ist damit möglich, ein Objekt zu erstellen oder einen Hash oder ein Array zu binden.

Tie ist spannend. Mit Tie kannst Du lügen, was das Zeug hält ;)

Ein tie(my @array, 'TieLog'); heißt z.B. noch lange nicht, dass in @array die Daten liegen, @array ist nur ein Symbol hinter dem sich die Instanz der Klasse verbirgt, ein Objekt.

Erst wenn mit dem @array operiert wird, greifen die Methoden, die dafür zuständig sind. Das @array lässt sich 'füllen' mit einem Abfrageergebnis auf die DB, was da gemacht werden muss wird dem tie() als Parameter mitgegeben (z.B. für die Where-Klause). Wobei: 'gefüllt' mit Daten heißt, das Array liegt als Referenz im Objekt selbst, z.B. in $self->{ARRAY}.

Mit dem gebundenen @array ist es dann möglich, eine Callbackfunktion aufzurufen, oder die Daten über eine Array-Referenz abzuholen, auf jeden Fall ist eine wirkungsvolle Fehlerbehandlung auch sehr gut in der Vermittlungsschicht unterzubringen.

Schon länger her: Ein Change ist geplant, der Feldtyp in der Logtabelle, bisher unix-Timestamp, soll auf date_time geändert werden. Jetzt haben wir klare Verhältnisse: Im Programmcode muss dazu nichts geändert werden, nur die Klasse 'TieLog' ist dazu anzufassen, alter table und Anpassen der Statements, das ist alles ;)

Sorry fürs lange Gerede,
Hotti

--
Nebenbei: Beim Liquidieren von Ameisen entsteht Ameisensäure.