IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend Framework PHP Discussion :

Bonne utilisation des models


Sujet :

Zend Framework PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2007
    Messages : 18
    Points : 18
    Points
    18
    Par défaut Bonne utilisation des models
    Bonjour,

    Je débute avec ZendFramework et je souhaiterais, si possible, partir sur de bonnes base. J'ai donc une ptite question sur l'utilisation des models.

    Prenons l'exemple d'un model pour des articles. Sont travail est de renvoyer les infos de l'article demandé, enregistrer des modifs dans la BDD et autre.

    Pour celà je peux l'utiliser de 2 façons :

    Soit je créé une instance de mon model pour chaque article soit un seul model se charge de me donner les infos pour xx articles. Voici quelques explications pour bien comprendre :

    Je souhaite afficher plusieurs articles sur une page :

    1 - Je créé une instance pour chaque article
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?php
    // $listeArticles est un array contenant les ids de mes articles
    foreach ( $listeArticles AS $uid ) {
    	$unArticle = new Article($uid);
    	$unArticle -> recupererInfos();
    	$unArticle -> statAffichage();
    	$unArticle -> preparerInfosPourWeb();
    	$infosPourVue[] = $unArticle -> infosWeb;
    }
    $this -> view -> infosArticles = $infosPourVue;
    ?>
    2 - Mon model ne fait que renvoyer les infos
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?php
    // $listeArticles est un array contenant les ids de mes articles
    $Article = new Article();
    foreach ( $listeArticles AS $uid ) {
    	$infosArticles 	= $Article -> recupererInfos($uid);
    	$Article -> statAffichage($uid);
    	$infosArticles	= $Article -> preparerInfosPourWeb($infosArticles);
    	$infosPourVue[] = $infosArticles;
    }
    $this -> view -> infosArticles = $infosPourVue;
    ?>
    Personnellement je trouve la version 1 plus interessante mais sur un forum quelqu'un m'a dit qu'avoir xx instances du même objet n'était pas génial.

    Vu que je ne vois pas pourquoi et que je n'ai pas eu d'explications je me tourne vers vous ?

    Selon vous quelle solution est la meilleur et surtout pourquoi ?

    Merci pour vos réponses.

    Cordialement,
    Kaimite

  2. #2
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 54
    Points : 62
    Points
    62
    Par défaut
    Entre ces 2 solutions je ne sais pas vraiment laquelle est la meilleurs.

    Par contre, niveau performance, je pense qu'il faut limiter surtout le nombre de requêtes sur la base de données.

    Il faut t'arranger pour faire une méthode qui récupère toutes les informations de ta liste d'article en 1 seule requête (Ce qui doit être dans ton cas assez facile à mettre en place).

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2007
    Messages : 18
    Points : 18
    Points
    18
    Par défaut
    J'utilise un cache Zend pour eviter les requêtes de description de la table à chaque instance de mon model.

    Ensuite pour chaque article j'utilise un cache perso.

    J'ai un fichier article_35.cache.php qui contient un tableau associatif : le reflet de l'enregistrement mySQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $infosCache['uid'] = "9";
    $infosCache['versions_id'] = "1";
    $infosCache['rubriques_id'] = "88";
    $infosCache['titre'] = "Avant de commencer à coder !";
    $infosCache['surtitre'] = "";
    $infosCache['lanceur'] = "";
    $infosCache['wysiwyg'] = "1";
    $infosCache['audio'] = "";
    $infosCache['video'] = "";
    $infosCache['url_suite'] = "";
    $infosCache['date_ajout'] = "2008-05-25 17:38:01";
    $infosCache['date_debut'] = "2008-05-25";
    $infosCache['date_fin'] = "0000-00-00";
    Donc quand je fais un listing de mes articles j'ai normalement une seule requete : Celle qui renvoie les ids des articles de la rubrique.

    Donc même avec 35 articles sur ma page je n'ai qu'une seule requete.
    Sauf si, bien sur le cache de l'article n'existe pas !

  4. #4
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 54
    Points : 62
    Points
    62
    Par défaut
    Oki donc pas de problème. Je n'utilise pas Zend Cache mais ça a l'air intéressant
    Je pensais que tu exécutais une requête dans la méthode $unArticle -> recupererInfos();


    Personnellement j'ai tendance à utiliser des modèles proches de ta 2e solution, car dans mon cas je fonctionne plus avec un système du type:

    - Récupération de tous les articles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    require_once('Articles.php');
    $ArticleS = new ArticleS();
    $InfosArticles = $ArticleS -> getAllArticles(); 
    $this->view->InfosArticles = $InfosArticles;
    $InfosArticles est issu d'une requête type "fetchAll", je fais un foreach sur la variable dans ma vue.

    - Récupération de 1 article:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    require_once('Articles.php');
    $ArticleS = new ArticleS();
    $InfosArticle = $ArticleS -> getArticle($id); 
    $this->view->InfosArticle = $InfosArticle;
    $InfosArticle est issu d'une requête type "fetchOne", je l'utilise directement dans ma vue.

    Je créé ainsi toujours une seule instance de ma classe "Articles". Maintenant je ne me suis jamais posé la question de savoir si c'était le must ou pas :p

    Y-a-t-il des avis éclairés sur ce point?

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2007
    Messages : 18
    Points : 18
    Points
    18
    Par défaut
    En fait ma fonction recupererInfos est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public function recupererInfos () {
    	//--> TEST SI ON DOIT UTILISER LE CACHE
    	$configSite = Zend_Registry::get("configSite");
     
    	if ( $configSite -> models -> cache == true ) {
    		return $this -> _infosDepuisCache();
    	}
    	else {
    		return $this -> _infosDepuisSQL();
    	}
    }
    Si je peux utiliser le cache (défini dans le config) alors je lance _infosDepuisCache(), qui appelle une autre fonction pour le générer s'il n'existe pas ou bien je lance _infosDepuisSQL()

    Mais dans mon model Article j'ai également des fonctions renvoyerArticlesDe() qui me renvoie tous les articles d'une rubrique.

    Donc j'ai des méthodes spécifiques à un article unique :
    • recupererInfos()
    • preparerPourWeb()
    • preparerPourForm()
    • enregistrerArticle()
    • etc.


    Et d'autres qui me renvoi des articles
    • renvoyerArticlesDe()


    Si quelqu'un a une autre proposition ou un autre avis

Discussions similaires

  1. [gtkmm] de la bonne utilisation des pixbuf
    Par Rniamo dans le forum GTK+
    Réponses: 2
    Dernier message: 23/06/2008, 22h56
  2. bonne utilisation des alias
    Par gok6tm dans le forum Requêtes
    Réponses: 0
    Dernier message: 15/11/2007, 11h48
  3. Avis sur la bonne utilisation des Threads
    Par Pitivier dans le forum Général Java
    Réponses: 8
    Dernier message: 28/11/2006, 20h07
  4. [C#] La bonne utilisation des WinForms (ouverture-Fermeture)
    Par Harry dans le forum Windows Forms
    Réponses: 28
    Dernier message: 03/08/2005, 11h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo