Moin!
Ein Shop braucht natürlich Zugriff auf eine Datenbank. Also fing ich mit einer Klasse "DB" an, welche die Verbindungsdaten zur Datenbank erhält und sämtliche Zugriffe auf die Datenbank kapselt. Nirgendwo außerhalb der DB-Klasse sollte auch nur das kleinste Fitzelchen SQL stehen.
Nun ist so ein Entwurf gut? Außer bei sehr kleinen Dingen würde ich sagen, nein.
Das hängt davon ab, was man will, würde ich meinen.
Objekte zu haben ist nett. Allerdings wäre es in meinem Shop darauf hinausgelaufen, dass ist anstelle von Arrays mit Strings Objekte mit Strings gehabt hätte. Also eine zusätzliche Ebene der Komplexität integriert hätte, die mir keinen Vorteil gebracht hätte.
Denn man weiß ja auch: Direkte Zugriffe auf die Eigenschaften eines Objektes sind böse, man benutze dafür besser get- und set-Methoden. Ich hätte also ein allgemeines "Ich verwalte ein Array"-Objekt gestrickt, welches mit getArrayValue($key) und setArrayValue($key,$value) anzusprechen wäre. Das ergibt keinen Vorteil gegenüber der Methode, einfach direkt ein Array zu verwenden.
Abgesehen davon war ich zu dem Zeitpunkt noch nicht so weit, komplexe objektorientierte Programmierung realisieren zu können. ;)
Aus den Daten in der Datenbank wird man ja tpyischerweise ein Datenmodell aus Objekten aufbauen. Je komplexer die Anwendung wird, desto mehr Komponenten wird es geben, die irgendwie ein Datenmodell aus Daten in der Datenbank aufbauen.
Objektorientierung hin oder her - solange man die Datenbank nur mit SQL ansprechen kann, muß jegliches Datenbankmodell immer wieder auf einen String zurückgeführt werden. Und aus einem String heraus wieder als Objekt generiert werden.
Ich habe bei solchen Anwendungen typischerweise eine Klasse, die die Verbindung zur Datenbank herstellt, und sehr viele Klassen, die diese benutzen und auf die Datenbank zugreifen.
Das wirft natürlich das Problem auf, dass die Datenbankzugriffe irgendwie abgestimmt sein müssen.
Das wirft vor allem die Problematik auf: Wie entstehen die Datenobjekte eigentlich. Ohne existierende DB-Zugriffsklasse funktionieren sie nicht. Wie erhalten sie Kenntnis von und Zugriff auf diese DB-Klasse?
Abgesehen davon haben eigentlich alle Datensätze einer Datenbank irgendwie etwas miteinander zu tun. Man kann nicht einfach so trennen. Bzw. wenn man trennt, dann eigentlich entlang der natürlichen DB-Grenzen: Datensätze und Tabellen.
Und da die Objekte sowieso alle am Skriptende wieder gelöscht werden: Warum nicht einfach genau die Daten aus der DB abfragen, die man braucht, und alle anderen ignorieren. Bei einem komplexen Objektmodell für Daten hätte ich das Gefühl, dass sich PHP dann die meiste Zeit mit dem Parsen der Klassendefinitionen rumschlägt, um dann nur genau eines der vielen möglichen Objekte wirklich anzulegen, mit Daten zu befüllen, in ein Template zu packen und sie auszugeben. Sowas kann man auch effizienter lösen. :)
Abgesehen davon: Meine Templateklasse kann ganz prima komplette Arrays entgegennehmen und direkt den Platzhaltern zuweisen - ideal bei Datenbankabfragen, bei denen die Feldbezeichner ja als Arrayschlüssel schon enthalten sind und durch Alias-Namen auch frei und fix gewählt werden können. Mit Objekten funktioniert das allerdings nicht. :)
- Sven Rautenberg
My sssignature, my preciousssss!