2009-05-05 10 views
1

Aujourd'hui à quelqu'un de travail ont essayé de me convaincre que:appels de base de données dans Smarty/vues/modèles

{$obj->getTableInfo()} 

est très bien pour Smarty/mvc/templating parce qu'il utilise une méthode d'objets. J'ai fait valoir que parce qu'il appelle la base de données, il n'y a pas de place et il devrait être dans le contrôleur (nous n'utilisons pas réellement MVC). Ai-je raison de comprendre les séparations logiques qui sont utilisées dans MVC et généralement dans la modélisation? Ou y a-t-il quelque chose qui me manque?

+0

Est-il vraiment juste que je vote en faveur de ceux qui soutiennent mon point de vue? Probablement pas ... Je voulais vraiment entendre les gens qui pensaient que c'était ok ... Oh bien – SeanJA

Répondre

5

Vous avez raison. Il a tort.

Les appels de base de données, quelle que soit leur forme, doivent être conservés dans le contrôleur si vous voulez faire le MVC correctement.

De toute évidence, les gens pissent partout ce que devrait faire et faire des choses comme ça, mais ce n'est pas la bonne façon.

1

Eh bien, il n'y a pas de règles "officielles" ou quoi que ce soit, mais je pense que quelque chose comme ça appartient au contrôleur. Je ne fais rien dans mon code de vue, sauf les variables d'affichage, rien de plus complexe qu'un if ou une boucle de type foreach est autorisée. Certainement pas appeler les fonctions qui accèdent à la base de données. Cela devrait tout être chargé par le contrôleur, la vue devrait seulement décider s'il doit l'afficher ou non.

0

Dépend vraiment de son contexte et de sa portée.

Est-ce que $ obj est le contrôleur ou le calque de modèle? Cela devrait répondre si oui ou non il est valide à mon avis.

En réponse à la lecture des autres réponses.

Le nom de fonctions lui-même se rapporte à une simple méthode getter. Il peut faire un appel à la base de données via une couche de contrôleur. Ce que je dirais est ok. Surtout si elle utilisait une forme de cache en mémoire. (c'est-à-dire que le getter est le setter car vous ne voulez le mettre en cache que lorsqu'il est utilisé une fois.)

+0

C'était son argument ... 'Il est caché après le premier appel ...' Mais ... ce serait 'mis en cache' si vous le mettez dans une variable et le transmettez à la vue – SeanJA

+0

La mise en cache à la demande ne fonctionnera que si elle est uniquement mise en cache sur demande. c'est-à-dire au premier appel. De toute autre manière et cela ne fonctionnerait pas comme prévu. Quelque chose dans cette fonction doit faire un appel quelque part. La couche de vue ne fait pas cet appel à la base de données. C'est faire un appel à l'objet. L'objet fait un appel à x. – Louis

+0

En outre, si l'appel db réel est dans cette fonction, cela signifie que quelque chose ne va pas. Il doit y avoir la couche du modèle entre les deux. S'il fait un appel à la couche de contrôleur alors c'est bien imo. – Louis

Questions connexes