Chiamate al database in Smarty / viste / modelli
-
05-07-2019 - |
Domanda
Oggi al lavoro qualcuno ha cercato di convincermi che:
{$obj->getTableInfo()}
va bene per smarty / mvc / templating perché sta usando un metodo object. Ho sostenuto che, poiché effettua una chiamata al database, non ha posto dove trovarsi e dovrebbe essere nel controller (in realtà non utilizziamo MVC). Ho ragione nella mia comprensione delle separazioni logiche utilizzate in MVC e in generale nel modello? O c'è qualcosa che mi manca?
Soluzione
Hai ragione. Ha torto.
Le chiamate al database, non importa in quale forma, dovrebbero risiedere nel controller se si desidera eseguire MVC nel modo corretto.
Ovviamente le persone pisciano su tutto ciò che dovrebbe e fanno cose del genere, ma non è il modo corretto.
Altri suggerimenti
Bene, non ci sono "quotazioni ufficiali" regole o altro, ma penso che qualcosa del genere appartenga al controller. Non faccio nulla nel mio codice di visualizzazione tranne le variabili di visualizzazione, niente di più complesso di un foreach
-type loop è consentito. Certamente non chiamando funzioni che accedono al database. Tutto ciò dovrebbe essere caricato dal controller, la vista dovrebbe solo decidere se deve essere visualizzato o meno.
Dipende dal suo contesto e portata davvero.
$ obj è il controller o il layer modello? Ciò dovrebbe rispondere se sia o meno valido secondo me.
In risposta alla lettura delle altre risposte.
Il nome delle funzioni in sé lo considera un semplice metodo getter. Può effettuare una chiamata al db tramite un livello controller. Il che direi è ok. Soprattutto se ha usato una qualche forma di memorizzazione nella cache. (ad esempio, il getter è il setter in quanto si desidera memorizzarlo nella cache solo quando viene usato una volta.)