Ich werde diese Frage mit dem Disclaimer einreichen, von dem ich weiß, dass es viele gute MVC-Frameworks (für PHP und andere Sprachen) gibt. Die Motivation hier ist zu verstehen. Und Entschuldigung für die Länge der Frage!Design von Assoziationen zwischen Modellen innerhalb eines MVC-Frameworks
Wenn es mit Beziehung kommt zwischen den Modellen zu tun haben (die übliche 00.59, man viele und etc.),
- Welches Modell für das Laden des Vereins zuständig ist?
- Wie soll die Assoziation geladen werden?
Zum Beispiel hat ein Benutzer eine Bildergalerie; Es gibt das Profil des Benutzers und die Bilder des Benutzers. Das Modell kann wie folgt aussehen:
class Model_User {
public function load($id) { /* loading code here*/ }
}
class Model_Photographs {
public function load($id) { /* loading code here */ }
}
Also für Frage # 1, Welche Klasse sollte alle Fotos laden, die ein Benutzer?
Wenn es in der Klasse Model_User ist, bedeutet dies, dass die Klasse jetzt von Model_Photographs abhängig ist. Sollte es eine andere Klasse sein?
Die zweite Frage ist , wie das Laden der Beziehung erfolgt.
Welches Design ist besser?
class Model_User {
public function load_photographs() {
$sql = "SELECT photographs.id, photographs.url, photographs.caption FROM
user_photographs, photographs WHERE
user_photographs.photoid = photographs.id AND
user_photographs.userid = {$this->id}";
/* snipped */
foreach ($results as $photo)
{
$photo = new Model_Photo();
$photo->set($photo);
$this->photos[] = $photo;
}
}
}
Oder ist das besser?
class Model_User {
public function load_photographs() {
$sql = "SELECT photoid FROM user_photographs WHERE
user_photographs.userid = {$this->id}";
/* snipped */
foreach ($results as $photo_id)
{
$photo = new Model_Photo($photo_id);
$this->photos[] = $photo;
}
}
}
Der erste Code verwendet nur eine Abfrage, sondern erfordert Model_User die Felder zu wissen, von der Fotografie Tisch zu holen (die überhaupt nicht seine Domäne ist); Der zweite Code ist sauberer, führt aber zu mehr SQL-Abfragen.
will eine strenge OOP Antwort, oder einfach nur eine Meinung? – yoda
Strict OOP, wenn möglich – Extrakun