Hallo,
so jetzt frage ich doch - nach einigen Stunden grübeln.
Ich möchte 2 Klassen bauen, deren (optimales) Zusammenspiel ist mir allerdings selbst noch nicht ganz klar. Das hört sich erstmal komisch an, gemeint ist folgendes:
Ich habe eine ganz normale Datenbank-Klasse DatabaseManager. Mittels Factory werden unterschiedliche Objekte erzeugt, momentan gibt es nur DatabaseManager_MySQL(), die von dieser Klasse erbt.
Sie führt die mysql_*() Funktionen aus und loggt dazu noch die Queries und Fehler. Das übliche eben.
Jetzt möchte ich nach dem gleichen Factory-Schema eine DataManager Klasse erstellen, die mir automatisch (in diesem Fall My-)SQL-Code erzeugt und diese an das DatabaseManager() Objekt weitergibt.
Sei es get('username', 'Zergling') oder getAll() ..
Zusätzlich zu dieser harmlosen Prozedur sollen noch die 1:n und n:m Verknüpfungen der selektierten Datensätze zum Ergebnis hinzugefügt werden.
Am Ende also ein Array mit Objekten (den Datensätzen), die jeweils als weitere Eigenschaften wiederum Objekte (Fremdschlüssel-Verknüpfungen) haben können.
Die Verknüpfungen erfährt die Klasse über einen PHP-Array, den es pro Tabelle gibt. Das "link"-Element behinaltet also zB einen Array mit dem Konfigurations-Array der zu verknüpfenden Tabelle und Angabe der Primärschlüsseln die zur Verknüpfung benötigt werden.
Nur wie soll ich den DataManager verwenden?
Statisch mit Übergabe des DatabaseManager-Objekts, dem Konfiguration-Array für die Tabelle die ich selektieren möchte plus den Selektionsbedingungen (Spalte, Werte, Sortierung, Limit)?
Erscheint mir etwas viel.
Zumal die Manager-Klasse ja eigentlich einen Zustand hat. Aber welchen eigentlich, die Datenbank oder die Konfiguration?
Soll ich also pro Konfigurations-Array eine neue Instanz des Managers erstellen oder pro Datenbankverbindung?
Wenn pro Datenbank-Verbindung, dann stellt sich ja die Frage, wozu dann überhaupt noch als Objekt.
Am Ende möchte ich eigentlich nur leicht aus Tabelle News, Guestbook oder WhatEver selektieren.
Oder würdet ihr komplett anders an die Sache rangehen?
Was ist denn überhaupt besser - den DataManager die DB-Verbindung intern über die DatabaseManager() selbst aufzubauen oder den selbst aufrufen und ihr das explizit übergeben?
so jetzt frage ich doch - nach einigen Stunden grübeln.
Ich möchte 2 Klassen bauen, deren (optimales) Zusammenspiel ist mir allerdings selbst noch nicht ganz klar. Das hört sich erstmal komisch an, gemeint ist folgendes:
Ich habe eine ganz normale Datenbank-Klasse DatabaseManager. Mittels Factory werden unterschiedliche Objekte erzeugt, momentan gibt es nur DatabaseManager_MySQL(), die von dieser Klasse erbt.
Sie führt die mysql_*() Funktionen aus und loggt dazu noch die Queries und Fehler. Das übliche eben.
Jetzt möchte ich nach dem gleichen Factory-Schema eine DataManager Klasse erstellen, die mir automatisch (in diesem Fall My-)SQL-Code erzeugt und diese an das DatabaseManager() Objekt weitergibt.
Sei es get('username', 'Zergling') oder getAll() ..
Zusätzlich zu dieser harmlosen Prozedur sollen noch die 1:n und n:m Verknüpfungen der selektierten Datensätze zum Ergebnis hinzugefügt werden.
Am Ende also ein Array mit Objekten (den Datensätzen), die jeweils als weitere Eigenschaften wiederum Objekte (Fremdschlüssel-Verknüpfungen) haben können.
Die Verknüpfungen erfährt die Klasse über einen PHP-Array, den es pro Tabelle gibt. Das "link"-Element behinaltet also zB einen Array mit dem Konfigurations-Array der zu verknüpfenden Tabelle und Angabe der Primärschlüsseln die zur Verknüpfung benötigt werden.
Nur wie soll ich den DataManager verwenden?
Statisch mit Übergabe des DatabaseManager-Objekts, dem Konfiguration-Array für die Tabelle die ich selektieren möchte plus den Selektionsbedingungen (Spalte, Werte, Sortierung, Limit)?
Erscheint mir etwas viel.
Zumal die Manager-Klasse ja eigentlich einen Zustand hat. Aber welchen eigentlich, die Datenbank oder die Konfiguration?
Soll ich also pro Konfigurations-Array eine neue Instanz des Managers erstellen oder pro Datenbankverbindung?
Wenn pro Datenbank-Verbindung, dann stellt sich ja die Frage, wozu dann überhaupt noch als Objekt.
Am Ende möchte ich eigentlich nur leicht aus Tabelle News, Guestbook oder WhatEver selektieren.
Oder würdet ihr komplett anders an die Sache rangehen?
Was ist denn überhaupt besser - den DataManager die DB-Verbindung intern über die DatabaseManager() selbst aufzubauen oder den selbst aufrufen und ihr das explizit übergeben?

Kommentar