2009-08-14 2 views
0

Ich komme immer zu dem gleichen Problem bei der Implementierung neuer Datenobjekte, die einige Website verwenden wird. Es scheint mir naturaly das Objekt zu füllen ...PHP MVC - wie Daten zwischen verschiedenen Schichten übergeben werden - Objekte oder Arrays

object: news 
news subobjects: mediaItems, user, category 

ich verzögertes Laden von zugehörigen Objekten (Listen von Objekten) implementieren usualy und haben auch eine statische Methode, die Nachrichten Objektdaten, Medien und Kategorie auf einmal zu füllen (von einer verbundenen SQL-Abfrage, als Lazy Loading erfordert 3 Abfragen). Aber manchmal, tatsächlich ziemlich üblich, brauche ich zusätzliche Parameter für eine bestimmte Ansicht oder Aggregation, die neben dem Nachrichtenobjekt abgerufen werden. Um diesen Parameter zu erhalten, würde ich eine neue SQL-Abfrage verwenden. Zur gleichen Zeit weiß ich, dass ich eine komplexere Abfrage verwendet hätte, um das Nachrichtenobjekt mit diesem Parameter zu holen.

Meine Frage ist grundsätzlich: Ich hole Daten als eine Reihe von Elementen und übergeben Sie sie an die Ansicht im späteren Fall, oder nehmen Sie das News-Objekt mit speziellen Laden und Umgang mit dem hinzugefügten Parameter, nur in dieser Ansicht benötigt und nur zur Anzeige.

Antwort

0

Ich denke, es hängt von der Situation ab. Manchmal ist es einfach praktisch, es mit der ursprünglichen Abfrage zusammen zu bekommen, und manchmal ist es das nicht wert - besonders, wenn die Daten recht gut abrufbar sind.

Meine App verwendet eine Art Kombination - wir verbinden Joins, um mehrere Objekte pro Zeile zu generieren, und wir führen mehrere Abfragen aus, um einige andere Dinge zurückzuholen. Alles wird jedoch über Memcache zwischengespeichert, so dass wir uns nicht um zu viele Abfragen sorgen, solange sie alle einfach und schnell sind.

Wir übergeben dann die Liste der Zeilen (wie die Liste der Nachrichten) in die Ansicht (eigentlich ein db_table_rowset), und für die anderen Abfragen übergeben wir einfach die einzelnen Zeilen (db_table_row objs). Dann sind natürlich noch andere Vars an der Ansicht vorbeigegangen. Die Ansicht arbeitet dann ordnungsgemäß mit den Zeilen (dem Modell)

Verwandte Themen