2009-05-05 9 views
1

Heute bei der Arbeit jemand versucht, mich zu überzeugen, dass:Datenbank Anrufe in Smarty/Ansichten/templates

{$obj->getTableInfo()} 

für Smarty/Mvc/Templat in Ordnung ist, weil es eine Objekte Methode verwendet. Ich argumentierte, dass, weil es einen Aufruf an die Datenbank macht, es keinen Platz hat und es im Controller sein sollte (wir benutzen MVC nicht). Habe ich recht, wenn ich die logischen Trennungen verstehe, die in MVC und allgemein im Templating verwendet werden? Oder gibt es etwas, das mir fehlt?

+0

Ist es wirklich fair, dass ich diejenigen wähle, die meine Sicht unterstützen? Wahrscheinlich nicht ... Ich wollte wirklich von den Leuten hören, die dachten, es sei in Ordnung ... Oh, das ist gut – SeanJA

Antwort

5

Sie haben Recht. Er hat Unrecht.

Datenbankaufrufe, egal in welcher Form, sollten in der Steuerung leben, wenn Sie MVC richtig machen wollen.

Offensichtlich Leute pissen überall, was es sein sollte und tun Sachen wie das, aber es ist nicht der richtige Weg.

1

Nun, es gibt keine "offiziellen" Regeln oder irgendetwas, aber ich denke, so etwas gehört in den Controller. Ich mache nichts in meinem Ansichtscode außer Anzeigevariablen, nichts ist komplexer als ein if oder ein foreach-Typ Schleife ist erlaubt. Sicherlich keine Funktionen aufrufen, die auf die Datenbank zugreifen. Diese sollten alle vom Controller geladen werden, die Ansicht sollte nur entscheiden, ob sie angezeigt werden soll oder nicht.

0

Hängt von seinem Kontext und Umfang wirklich ab.

Ist $ obj der Controller oder die Modellschicht? Das sollte beantworten, ob es meiner Meinung nach richtig ist oder nicht.

In Reaktion auf das Lesen der anderen Antworten.

Der Name der Funktionen an sich bezieht sich auf eine einfache Getter-Methode. Es kann über eine Controller-Schicht einen Aufruf an die db machen. Was ich sagen würde, ist in Ordnung. Vor allem, wenn es eine Art von Caching im Speicher verwendet. (dh der Getter ist der Setter, weil Sie ihn nur einmal cachen wollen, wenn er einmal benutzt wird.)

+0

Das war sein Argument ... 'Es wird nach dem ersten Anruf zwischengespeichert ...' Aber ... es wäre "zwischengespeichert", wenn Sie es in eine Variable einfügen und es auch an die Ansicht übergeben. – SeanJA

+0

On-Demand-Caching funktioniert nur, wenn es nur zwischengespeichert wird. dh beim ersten Anruf. Irgendein anderer Weg und es würde nicht wie beabsichtigt funktionieren. Etwas in dieser Funktion muss irgendwo anrufen. Die Ansichtsebene führt diesen Aufruf nicht zur Datenbank aus. Es ruft den Gegenstand an. Das Objekt ruft x an. – Louis

+0

Weiter, wenn der tatsächliche DB-Aufruf in dieser Funktion ist, bedeutet das, dass etwas falsch ist. Es muss die Modellschicht dazwischen sein. Wenn es einen Aufruf an die Controller-Schicht macht, dann ist das in Ordnung. – Louis