Das von @dedlfix angeführte Beispiel taugt auch aus meiner Sicht nichts, es verwirrt eher. Daher mal ein bischen Code von mir.
Aufgabe: Benötigt wird eine transparente Schnittstelle zur Datenhaltung einer Benutzerverwaltung.
Anforderung als Codebeispiel:
$this->DAL = array(
'users' = array(
/* hier sind alle Benutzer persistent
nach numerischer Identity */
'0' => array(
'name' => 'Vollstecker',
'phone' => '+30 123..',
'group' => 'admin'
),
'1' => array(),
'2' => array()
),
groups => array(
'public' = array(
'descr' => 'Jeder darf hier alles tun',
'title' => 'Public Realm'
),
'admin' = array(
'descr' => 'Administratoren und Stellvertreter',
'title' => 'Administratoren'
)
)
);
Die Anforderung zeigt gleichzeitig die Anwendung: Benutzer werden einfach in das Array eingetragen und solange im Speicher gehalten, bis $this->DAL->write();
aufgerufen wird. Erst write() schreibt die Daten ins Repository. Und wie diese beschaffen ist (Dateisystem oder Datenbank oder ..) weiß allein der Data Access Layer DAL.
DAL ist also gleichzeitig ein abstrakter Datentyp zu dem sich Methoden definieren lassen für den lesenden und schreibenden Zugriff auf bestimmte Benutzer, Gruppen und Eigenschaften.
Und: Allein die Anwendung bestimmt die innere Struktur und den Aufbau des abstrakten Datentypes der persistent gemacht wird.
So, Nun habe ich mal aus meiner Erfahrung heraus ein bischen Code gepostet. Vielleicht ist das ja verständlicher als das was andere machen, nämlich nur aus Wikipedia abtippen (und dafür auch noch ++ kriegen).
Finesse: Der DAL ist so beschaffen daß er nicht die gesamte Repository in den Hauptspeicher holt sondern nur den Zweig der gerade angefordert wurde, z.B. ein bestimmter Benutzer. Und ja, das geht auch mit PHP zu machen.
MfG