Guten Abend zusammen, nach meinem Urlaub letzte Woche melde ich mich Heute mit einem frischen, aber kurzem, Posting zurück.
Das heutige Thema wird sein: Das „DAO“ Design Pattern.

Design Patterns: Data Access Objects

„DAO“ steht für Data-Access-Object und dient uns dazu Daten von einer (zu definierenden) Quelle zu beziehen. Diese Quelle kann eine Datenbanktabelle, eine Datei auf dem Server, eine API oder sonstwas sein.

Klassischerweise implementiert eine DAO Klasse ein Interface, welches uns bestimmte Methoden vorgibt – z.B. welche zum lesen, schreiben und löschen. Ziel ist eine einheitliche Schnittstelle zu entwickeln, mit der es möglich sein soll die Datenquelle zu wechseln ohne die Methoden oder die weitere Logik anzupassen:

/*
 * In diesem (PHP 5.4) Beispiel lade ich Daten von zwei verschiedenen DAO Klassen,
 * dabei bleibt die Syntax allerdings die gleiche. Der Parameter definiert die zu ladende ID.
 */

// Beispiel einer DAO Klasse, die auf eine Datei zugreift.
$log = (new log_dao_file)->get_data(123)->result();

// Beispiel einer DAO Klasse, die auf eine Datenbank zugreift.
$log = (new log_dao_db)->get_data(123)->result();

Wie ihr seht habe ich hier zwei Klassen, die ich mit identischer Syntax ansprechen kann – Die Daten werden von zwei ganz verschiedenen Quellen bezogen. Das ist quasi schon der ganze Trick 😉

Wir können natürlich wieder einige Schritte weiter gehen und z.b. die zu ladende Klasse oder die Quelle als Parameter an eine statische Factory Methode übergeben. Wie sehr ihr eure Klassen abstrahiert ist natürlich euch überlassen – Aber haltet es überschaubar.

Zu einer DAO Klasse kann ich euch leider keinen Beispielcode bieten, es gibt kein „allgemein gültiges“ Entwurfsmuster – Da müsst ihr schon selbst ran. Im Grunde besteht dieses Pattern auf einem Interface (oder einer abstrakten Klasse) die alle nötigen Methoden beschreibt: lesen, schreiben (+bearbeiten) und löschen.

Andere DAO-Modelle

Neben dem Design Pattern, welches auf Wikipedia beschrieben wird, gibt es natürlich etliche eigene Interpretationen… Sofern eine Klasse zum „holen von Daten“ benutzt wird (das bezieht sich auch auf ORM Klassen) kommt es vor das diese als DAO bezeichnet werden.
Das ist zwar per Definition nicht ganz richtig, aber es wird sich kaum jemand darüber beschweren.

Ehrlich gesagt kann ich zu diesem Thema gar nicht sehr viel mehr schreiben. Das DAO Pattern ist sehr schnell erklärt und bietet kaum die Möglichkeit für vernünftige Code-Beispiele. Aus diesem Grund möchte ich mit diesen letzten Worten den heutigen Eintrag beenden und euch allen noch eine angenehme Woche wünschen!

Ich denke nächste Woche werde ich wieder etwas mehr zu schreiben haben!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.