2014-06-17 3 views
-1

je travaille sur une application écrite en PHP. J'ai décidé de suivre l'architecture MVC. Cependant, comme le code devient de plus en plus gros, j'ai réalisé que du code est dupliqué dans certains cas. En outre, je suis toujours confus si je devrais utiliser des fonctions statiques lors de la requête de la base de données ou non.requêtes Manipulation mysql en php mvc

Prenons un exemple sur la façon dont je le fais:

class User { 
    private id; 
    private name; 
    private age; 
} 

Maintenant, dans cette classe, je vais écrire des méthodes qui fonctionnent sur une seule instance utilisateur (opérations CRUD). D'autre part, j'ai ajouté des fonctions statiques générales pour faire face à plusieurs utilisateurs comme:

public static function getUsers() 

Le principal problème que je suis face est que je dois accéder aux champs par les résultats quand je dois boucle par les utilisateurs mes opinions. par exemple:

$users = User::getUsers(); 
// View 
foreach($users as $user) { 
    echo $user['firstname']; 
    echo $user['lastname']; 
} 

j'ai décidé de le faire parce que je ne me sentais pas qu'il est nécessaire de créer une instance utilisateur unique pour tous les utilisateurs juste pour faire un peu de traitement de données simples comme l'affichage de leurs informations. Mais, et si je change les noms des champs de la table? Je dois passer en revue tout le code et changer ces champs, et c'est ce qui me dérange.

Donc ma question est, comment vous traitez avec des requêtes de base de données comme ça, et il est bon d'utiliser des fonctions statiques lors de l'interrogation de la base de données. Et enfin, où est-il logique de stocker ces fonctions "d'affichage" comme celle dont j'ai parlé?

Répondre

0

Votre approche semble bien, comment je voudrais encore utiliser la mise en cache comme memcached pour mettre en cache les valeurs et vous pouvez ensuite supprimer statique.

public function getUsers() { 
    $users = $cacheObj->get('all_users'); 
    if ($users === false) { 
    //use your query to grab users and set it to cache 
    $users = "FROM QUERY"; 

    $cacheObj->set('all_users', $users); 
    } 

    return $users; 
} 
+0

Pouvez-vous expliquer comment fonctionne $ cacheObj-> get ('all_users')? Ou pouvez-vous suggérer un article qui traite cette méthode de mise en cache? – abdelk

+0

@abdels tous dans php.net: 'http: // www.php.net // manual/en/memcached.set.php' – GGio

-1

(M) odel (V) IEW (C) ontroller est un excellent choix de choix, mais mon conseil est de regarder à l'aide d'un cadre. Le con est qu'ils peuvent avoir une courbe d'apprentissage étape, pro est il fait beaucoup de levage lourd. Mais si vous voulez continuer sur votre propre fair-play, il peut être difficile de le faire vous-même.

son emplacement vous avez le choix parce que le modèle est pas clairement défini: Vous entendrez le terme « logique métier » utilisé, essentiellement modèle a tout Baring vues et les contrôleurs. Les contrôleurs ne doivent être que des données mobiles, puis les renvoyer à la vue.

maisons modèles d'interaction Vous DB, conversions de données, les changements de fuseau horaire, jour général aux fonctions de jour.

Moudle /utilisateur /Modèle /DB ou (entités et Mapper) /utils

J'utilise Zend et utilise des passerelles de table pour CRUD standard pour éviter les répétitions. Là où vous avez la méthode getUsers(), vous lui passez simplement un tableau, et il devient vraiment réutilisable et vous avez juste des tableaux différents dans diverses actions du contrôleur et il construit les requêtes à partir des informations du tableau.

Exemple:

$data = array ('id' => 26) 
$userMapper->getUsers($data); 

pour obtenir l'utilisateur 26

enter code here 
$data = array ('active' => 1, 'name' => 'Darren') 
$userMapper->getUsers($data);` 

pour amener les utilisateurs actifs nommé Darren

J'espère que cette aide.