Hi!
Diese getList() Methode könnte dann über eine Methode der Datenbankzugriffsklasse, vielleicht auf getList() eine Liste als Array bekommen, und würde die dann in einer Schleife einen Array mit Bild-Objekten erzeugen, indem sie die jeweiligen set*() Methoden der Bild-Klasse verwendet.
Ja gut, aber das entspräche ja in abgewandelter Form meinem Vorschlag 2: »Ich pfeiff auf die Performance und hol mir die Eigenschaften für jedes Bild einzeln.« Oder verstehe ich Dich da falsch?
Nein, an die DB geht eine einzige Query, nur werden aus dem Ergebnis dann von einer eigenen Klasse die Objekte erzeugt.
so in etwas
$galerie_objekt = GalerieManager::new();
// GalerieManager::new() macht sowas:
$galerie_obj =& new Galerie;
$res = $db->query ("SELECT....");
foreach ($tmp = $res->fetch...) {
$bild_objekt =& new Bild;
$bild_objekt->setDescription($tmp['desc']);
$bild_objekt->setUrl($tmp['url']);
$bild_objekt->setHeight($tmp['height']);
$bild_objekt->setComments($tmp['com']);
$galerie_obj->addPicture(&$bild_objekt);
}
return $galerie_obj;
Das ist sehr grob, geht nur ums Prinzip. Ist jetzt etwas abgewandelt, aber ich glaube so ungefähr würde ich es machen.
So ganz toll wird es nicht gehen, da Du Du bei der Abfrage nunmal Objekt-übergreifendes Wissen brauchst, wenn Du das mit einer einzigen machen willst. Ich würde das wo geht abstrakte Manager-Klassen machen lassen, die die Kommunikation zur DB und das schreiben in die eigentlichen Objekte der Business-Logik schreiben.
Und dann musst Du sehen, wenn Dir das an einer Stelle fürchterlich unperformant vorkommt, dann würde ich das so machen wie hier, eine Klasse die das ganze zusammenfasst und eine Manager-Klasse die halt etwas über mehr als eine Tabelle wissen muss.
Grüße
Andreas