2009-07-25 7 views
1

Je viens récemment plongé dans POO & maintenant MVC et je utilise ce moteur de modèle: http://www.milesj.me/resources/script/template-engineQuestion concernant MVC: SubClass pour l'activité DB

Je suis curieux de savoir une question sur où mettre mes appels DB (j'utilise une classe d'encapsulation de base de données de base).

J'ai vu deux façons de faire.

classe panier

/** 
* Counts items in cart 
* @return int 
*/ 
public static function count() { 
    require_once(DATABASE .'cartext.php'); 
    $info = User::getInfo(); 
    $count = CartExt::inCart($info['0']['userid']); 
    return $count; 
} 

Puis en classe CartExt

/** 
* user cart count 
* @param int 
* @return int 
*/ 
public static function inCart($shopperID) { 
    $db = Database::getInstance(); 
    $query = $db->execute("SELECT * FROM Listing WHERE shopperid = '$shopperID'"); 
    $count = 0; 
    while ($row = $db->fetchAll($query)) { 
     $count++; 
    } 
    return $count; 
} 

Avec de grandes fonctions, je peux voir l'avantage de séparer les deux, mais beaucoup de temps, il est aussi banal que l'exemple ci-dessus ou pire: la classe de base fait appel à Ext et renvoie sa valeur! En outre, je fais un require_once à partir de la fonction pour abaisser les requêtes http si quelqu'un le demande.

De toute façon, je veux juste quelques réflexions à ce sujet.

Aussi, ai-je raison de dire que je devrais gérer $ _POST ['data'] dans le contrôleur et le passer comme param à mes fonctions, par opposition à le manipuler dans la classe? (Je n'utilise pas encore d'objet/classe de formulaire si c'est important).

Dans l'attente d'entendre votre opinion à ce sujet.

+0

Maintenant vous m'avez fait demander: "faire un require_once pour abaisser les requêtes http" ... Qu'est-ce que cela signifie? :) – deceze

+0

Pour charger uniquement ce fichier lorsque cette fonction est appelée. – asdfasdfasdfasdf

+1

n'a rien à voir avec les requêtes HTTP. Accès au disque, oui. :) – deceze

Répondre

1

Les appels de base de données doivent être exécutés à partir du Modèle.
Si cela se passe via:

  • mysql_query()
  • une enveloppe de base de données
  • un ORM comme Doctrine

n'a pas d'importance dans la mesure du MVC est concerné. Bien que je puisse recommander ce dernier.

Raisonnement
Lorsque vous stockez des données dans une base de données que les données représente habituellement les données de modèle: un utilisateur, un ordre, etc.

Exceptions
Si vous stockerez des sessions dans la base de données ou de l'utilisation la base de données pour la mise en cache. Ceux-ci appartiennent plus au contrôleur que les classes Model.

Questions connexes