Philipp Hasenfratz: Abbilden einer DB in OO (Klassen) Sinnvoll? - Datenbank-Layer

Beitrag lesen

Halihallo zusammen

ich halte es für Notwendig den Threadtitel zu ändern, sodass vielleicht noch andere
auf den Thread aufmerksam werden. Der Titel "Primary Keys auslesen" zielt auf eine
Wissensfrage und ist demnach schnell beantwortet, so denken vielleicht einige, dass der
Thread bereits beendet ist. Dem ist nicht so, denn...

Das auslesen der Primary Keys war nur eine kleine Frage. Was mich viel mehr interessiert
ist das Prinzip und ob dieses Verwendung findet.

Nehmen wir als Beispiel eine normale Webapplikation. Die Webapplikation stellt dem Kunden
verschiedene Schnittstellen zur Verfügung, um mit der Webapplikation zu interagieren.
Diese Schnittstellen werden meist in eigenständige Programme aufgesplittet und oftmals
"hard-gecoded". Z. B. "neuer Account erstellen", ist ein einfaches INSERT-Statement
zuzüglich E-Mail Versand und anderer Aktivitäten. Ändern sich die Daten des Accounts,
muss auch das Insert-Statement überarbeitet werden, dies hat ggf. Konsequenzen auf andere
Programme, wo die Veränderung auch implementiert werden muss. Durch dieses
Mehrfachgebrauchen der Accountdaten entsteht eine Coderedundanz, die ich verhindern
möchte. Eine einfache Methode dies zu erreichen ist, eine Klasse für den Account zu
erstellen, worauf in jedem Programm zugegriffen wird. Da es meistens mehrere Objekte zu
verwalten gibt (Account, User, Gekaufte Artikel, Artikelportfolio, Warenkorb, ...) ist
auch hier wieder eine Redundanz im Code vorhanden, nämlich, dass jede Klasse direkt mit
der Datenbank interagiert und die SQL Statements direkt in die Klasse eingebunden sind.
Dies kann man verhindern, indem man eine "Datenbank-Abstraktions-Layer" erstellt, welcher
diese INSERT, UPDATE, DELETE und einfache SELECT Statements als genau spezifizierte
Methoden zur Verfügung stellt und ggf. Integrität, Validität und Fehlerfreiheit
sicherstellt. Besonders bei komplexen und vielschichtigen Webapplikationen kann dies
auch eine Vereinfachung darstellen, da jedes Objekt nur von einer entsprechenden
Datensatzinstanz erben muss und man sich vollständig auf die "Verarbeitungs-Methoden"
konzentrieren kann (nicht mehr dieses lästige einfügen, löschen und auslesen von
Objekten); auch ein zentral organisiertes Error-Handling und Logging könnte ggf. von
Nutzen sein.

Deswegen komme ich erst auf den Datenbank-Layer... Und nun meine eigentliche Frage:
Ist das Sinnvoll [1]?

[1] (Mögliche Bewertungs-/Meinungskriterien kann man aus [pref:t=34949&m=190754]
entnehmen)?

Viele Grüsse

Philipp