Einzelnen Beitrag anzeigen
  #1 (permalink)  
Alt 21.07.2009, 17:18
braindead braindead ist offline
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 24.09.2003
Beiträge: 243
braindead befindet sich auf einem aufstrebenden Ast
Standard PHP OOP: Datenbankeintrag Klasse - ein paar theoretische Überlegungen

Hallo,
mein aktuelles Problem ist etwas theoretischer, es geht um die objektorientierte Implementierung eines Datenbanktabelleneintrages.

Also eine Klasse dehren Objekte Einträge in meiner Mysql Datenbank entsprechen sollen. Der Sinn des ganzen ist der, das ich diese Klasse später vererben will an eine Komentar bzw. Forumspostklasse (ein solcher Forumspost stellt ja auch einen Datenbankeintrag dar) und außerdem noch an eine ToDolisten-Eintragsklasse (mehrere Webmaster arbeiten an einer Seite, inhaltilich, und sollen sich gegenseitig über einen ToDo-Liste auf dem neusten Stand halten können, auch hier wird das ganze über die Mysql Datenbank gespeichert).

Zunächst, ich bin recht neu in der objektorientierten Programmierung und miss/überinterpretiere das Konzept der Klassen vieleicht ein wenig.

Um das mal zu demonstrieren: die db_tableentry Klassen (die Datenbanktabelleneinstragsklasse) bzw. ihre Objekte repräsentieren ja Datenbankeinträge, im Prinzip besizt sie Methode um Änderungen an diesem Eintrag (An sich selbst) vornehmen zu können, und zur Ausgabe. Aus diversen Gründen besitzt sie auch einen Satz Variablen für die Aufnahme der Spalteneintrage die diese Einstrag in der Tabelle besitzt. Und genau diese Redundanz (der Datenbeitrag "manifestiert" sich an zwei Orten 1. in der Datenbank selber und 2. durch die Belegung der Klassenvariablen die ebenfalls die Spalteneinträge enthalten) macht mir Probleme.

Es stellen sich mir nämlich die Fragen:
1. muss ich bei der erzeugung eines neues Objektes dieser Klasse, bzw. im Konstruktor der Klasse diese Doppelpräsens der Tabelleneintragsinformation (einmal in der Tabelle und dann noch in den Klassen/Objekt Variablen) besonders berücksichtigen? Immerhin darf es ja (oder darf es doch) auf keinen Fall passieren, das in der Datenbank selbst andere Informationen stehen als in den Klassenvariablen! Sonnst müsste ja noch geklärt werden welches die echten/korrekten Informationen sind. Das heist ich muss beim verändern der Information, die Information sowohl in den Variablen und in der Datenbank gleichzeitig ändern?

Was mich zur 2. Frage führt:
Dieses Objekt stellt ja einen (existierenden?) Datenbankeintrag dar. Sollte diese Klasse also nun auch Methoden zur Erzeugung eines neuen Eintrags besitzen? Ein Beispiel, ein Auto ist ein Objekt mit den Methoden: Gas geben, Lenken usw. aber es hat sicher keine Methode mit dem Namen "erzeuge ein neues Auto" oder "kaufe auto", ich hoffe ihr versteht mein Dilemma? Das Erzeugen eines Klassenobjektes (mit $objekt = new classname!, nicht das anlegen eines neues Eintrags) entspricht hier ja nicht einem "kaufe Auto" sondern eher einem "registriere die existens eines Autos".
Wie umgehe ich das Problem? Eine weitere Klasse oder eher eine globale Funktion zur Erzeugung eines Datenbankeintrages?

3. Außerdem soll die Klasse eine Statische Methode erhalten zur Erzeugung einer Liste/eines Arrays von Datenbankeinstragsobjekten und zwar aus Performance Gründen, in der Regel liefert ein Datenbank Select Query ja mehrere Eintrage und die will ich nicht einzeln per PHP als solche db_tableentry Objekte realisieren sondern ich will das mir die Statische Methode das Result gleich auf mehrere Objekte (in einem Array) aufteilt.
Meiner Ursprünglichen Idee nach, würde eine Erzeugung eines solchen Objektes, mit der Verarbeitung der Tabelleninformation und einer Eintragsid funktionieren, der Konstruktur holt dann per select Query den Eintrag mit der gegebenen ID aus der gegebenen Tabelle und speichert die Werte in seinen Variablen. Wenn ich das bei einer Liste einzeln machen würde, würde für jeden Listeneintrag ein neuer select Query abgesetzt werden, was ja nicht so gut ist. Deshalb soll diese Statische Methode die Objekte auch erzeugen können ohne das bei der Erzeugung ein query abgeschickt werden muss, also der Konstruktor soll ein Argument besitzen (vieleicht "trusted" genannt) das die Statische Methode mit dem Wert "true" übergibt plus einem assoziativen Array ([Spaltenmame]->Spaltenwert) mit dem das Objekt erzeugt wird.

Kann man das so machen?

Geändert von braindead (21.07.2009 um 17:22 Uhr)
Mit Zitat antworten
Sponsored Links