pl: Datenbank Verbindung über Klassen

Beitrag lesen

Konfigurations Klasse -> Verbindungs Klasse -> Session ->User

Ein wirtschaftlicher Aspekt, seine Daten in Klassen zu organisieren ist der, dass eine Klasse den Speicherort abstrahiert.

Das heißt am Beispiel einer Konfiguration: Dieser Hugo von Daten steckt nur deswegen in einer Instanz, weil es eine Instanz geben muss, die den Speicherort kennt.

Oder für die Session: Dieses Array muss den Speicherort nur deswegen kennen, damit eine $session->write() weiß wo das $session-Objekt die Daten am Ende einer Session persistent macht.

Und der User schließlich ist auch ein Objekt, weil persistente Daten dahinterstecken.

Aufgrund einer solchen Herangehensweise ergibt sich auch die Klassenhierarchie. Eine spezielle Verbindungs-Klasse erübrigt sich, weil Config, Session, User selbst den Speicherort bestimmen und das unabhängig voneinander. So wird ein Data-Access-Layer für die Config austauschbar, ohne das ganze System umbauen zu müssen und sinngem. gilt das auch für alle anderen Klassen, die irgenwo die Daten speichern müssen (Dateisystem, Netzwerk, MySQL usw.).

Für den User schließlich ergeben sich 2 Orte persistenter Daten: Einmal diejenigen die in der Session stecken (username, zeitstempel der Anmeldung, Gruppe, usw.) und zum Anderen sind es die Stammdaten (Name, Vorname, PLZ, Ort, Passwort....).

Damit ein Programmierer nicht jedesmal nachgucken muss, wie die Datenstruktur in der Session aussieht, gibt ja die Möglichkeit, dem SessionObjekt Methoden zu verpassen. Und da könnte eine der Methoden $session->user() ein Array mit den Userdaten aus der Session liefern.

Zwischen Config und Session sehe ich jedoch keine Notwendigkeit einer Klassenbeziehung.

Nichts jedoch spricht dagegen, eine Klassenhierachie auf dem DAL abzu bilden, z.b. Config::File, Config::MySQL. Oder die Data-Abstraction erfolgt in der Klasse selbst und der Konstrukor entscheidet:

tie %SESSION, 'Session', file => $sessionfilename;
tie %SESSION, 'Session'  dbh  => $databasehandler;

Zur Beschaffung des Database-Handler (PDO, DBH) reicht eine Methode. Ich greife da gerne auf meine Factory zurück: $dbh = $self->dbh(base => 'dbname'); wobei die Methode dbh() den Pfad zur Datei mit den Credentials kennt (host,port,user,pass stehen da drin so genügt die Angabe des Namen für die Datenbank).