dedlfix: Datenbank Verbindung über Klassen

Beitrag lesen

Tach!

ich bin dabei über PDO eine Verbindungen zu Datenbank aufzubauen. Privat und rein zur übungszwecken. Ich habe mich immer grob das datenmodell gehalten.

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

//Bemerkung: die Pfeile entsprechen einer Vererbung

Warum müssen die Konfigurationsdaten in einer Klasse sein? Warum muss die Datenbankklasse davon erben? Es reicht, wenn sie die Daten zur Verfügung gestellt bekommt und sie verwendet.

Eine Session muss auch nicht von der Datenbank erben, wenn sie nur Verwender ist. Sie kann ihre Daten ja auch im Dateisystem ablegen und braucht dann einen anderen Persistierungsmechanismus. Sie mit der Datenbank fest zu koppeln, macht das nur unnötig schwer oder unmöglich.

User ist üblicherweise ein einfaches Objekt. POJO (Plain Old Java Object) und POCO (Plain Old CLR Object) nennt man das beispielsweise in anderen Programmiersprachen. Für PHP wäre das dann POPO, aber das klingt irgendwie falsch. Jedenfalls ist es besser zur Verwaltung der Daten Dinge wie ein Repository und/oder einen Service zu verwenden. Die sind das Bindeglied zwischen den Daten und der verwendeten Persistierungsmethode (Methode im allgemeinen und nicht im OOP-Sinne).

Es gibt zwar auch das Muster namens Active Record, aber das ist nicht besonders toll, weil dann die Datenobjekte immer die Persistierungsmethoden (hier im OOP-Sinne) mitschleppen, auch an Stellen, an denen man sie gar nicht braucht.

  • Was ist besser? Und wenn beide ihre vorzüge haben welche genau sind das?

Kommt immer darauf an, was man erreichen möchte. Daumenregel: Vererbung verwendet man nur, wenn man etwas erweitern muss. Wenn man es lediglich verwendet, muss man es nicht erben, dann kann man es übergeben bekommen und sich eine Referenz darauf merken. Vererbung führt dazu, dass man starre Verbindungen herstellt und die Dinge immer größer und damit unhandlicher werden.

  • Warum solte man keinen konstruktor new verwenden sondern nur extends und parent::irgendwas.

Wer sagt das?

  • Warum ist es nicht sinnvoll FINAL vor die konfiguration einer datenbankverbindung zusetzen wie

Welchen Sinn hat es denn, an den Stellen final zu verwenden? Kennst du einen, der dich für diese konkrete Verwendung von der Notwendigkeit und Richtigkeit der Verwendung überzeugt? Wenn nicht, dann lass es weg.

  • warum meine ich mich erinnern zu können sollte man be einer Verbindung nicht Konstanten verwenden?

Kommt auf das Ziel an. In einfachen Scripten spricht nicht wirklich was gegen ihre Verwendung. Allerdings verhindern sie oder erschweren massiv die Entwicklung nach dem TDD-Prinzip (test driven design). Beim TDD testet man nicht gegen eine richtige Datenbank, sondern eine simulierte, bespielsweise mit Mock-Objekten. Eine Datenbank ist eine Blackbox. Man kann da nicht testen, ob man die richtigen Werte übergeben hat oder ob man nur zufällig eine positive Rückmeldung bekommt. Das Mock-Objekt hingegen kann man untersuchen und so feststellen, dass Username und Passwort an den richtigen Stellen übergeben wurden.

dedlfix.