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

Langage PHP Discussion :

Vos avis sur mon implémentation MVC en PHP5


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 42
    Points : 27
    Points
    27
    Par défaut Vos avis sur mon implémentation MVC en PHP5
    Bonjour,

    Je ne sais pas si ce post à sa place dans ce forum si ce n'est pas le cas je m'excuse par avance.

    Voilà j'aimerais avoir vos avis concernant ma manière de pratiquer la conception MVC avec PHP5. Cette pratique est nouvelle pour moi.

    J'ai lu les différents tutoriaux de developpez ainsi que ceux sur Zend Framework.
    Je ne souhaite pas utiliser Zend pour diverses raisons dont le fait que je travaille sur de "petits" projets persos. Je pense avoir bien compris comment ça doit fonctionner mais je veux être sur.

    Je vais donc vous expliquer comment je procède mais avant ma première question concerne le Front Controller, est-il obligatoire dans le modèle MVC ? Ou peut-on avoir simplement un controller par page ?

    Pour l'exemple concret, je travaille sur un moteur de forum. Voilà comment j'ai découper la première page c'est à dire celle qui liste les forums (et les catégories et sous-catégories dans mon cas)
    -un bloc Header (haut de page) (rien à voir avec les headers http) avec le menu du forum
    -un bloc Path qui indique l'endroit où on se trouve par rapport à l'index. (Index > Nom de la Catégorie > nom de la sous catégorie > nom du Forum > Sujet > etc...)
    -Un bloc ListOfCategories (donc liste des catégories , sous catégories et forums)
    -Un Bloc Footer

    Pour chaque bloc, j'ai au moins une classe modèle et une classe vue.

    Pour mon index.php j'ai donc le IndexController, une facade qui gère les différents modèles dont les vues ont besoin IndexFacade, une vue générale IndexFrontView qui elle gère les différents vues des blocs ci-dessus et génère le HTML. Je n'utilise pas de moteurs de templates pour générer mon code mais une collection d'objets représentant chacun un élément HTML et ce qu'il contient. Chaque vue renvoit un objet Div que le FrontView se contente de concaténer dans le body de la page.

    En fait avec un schéma ça sera plus clair :
    Nom : Schema MVC.png
Affichages : 84
Taille : 21,7 Ko

    Déjà est ce que c'est une bonne approche du modèle MVC ?

    Ensuite mes doutes se situe plus au niveau de la manière de passer les données des modèles aux vues. Pour le moment, chaque modèle à une méthode GetData qui renvoie un ArrayObject contenant toutes les données que la vue correspondante à besoin. La vue les récupère dans un SetData().
    Le Set data parcours le ArrayObject et créer les propriétés à la volée grâce à __set.
    En gros ça donne quelque chose comme ça pour la création de la page :
    Méthode de l'IndexController :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public function RunDefaultAction(){
    		global $Registre;
    		// les modules qu'on veut affichés
    		$this->FrontView->AddView("Header")->AddView("LastChange")->AddView("Path")->AddView("ListOfCategory")->AddView("Path")->AddView("Statistics")->AddView("Footer");
    		$this->FrontModel->SetModelList(array_keys($this->FrontView->view_needed));
    		// On va demandé au modele de récupérer les données nécessaires à la vue
    		$this->FrontView->view_needed["ListOfCategory"]->SetData($this->FrontModel->model_needed["ListOfCategory"]->GetData());
    		$this->FrontView->view_needed["Path"]->SetData($this->FrontModel->model_needed["Path"]->GetData());
    		$this->FrontView->view_needed["Header"]->SetData($this->FrontModel->model_needed["Header"]->GetData());
     
    		$this->FrontView->view_needed["Footer"]->SetData($this->FrontModel->model_needed["Footer"]->GetData());
    	}
    Ensuite dans l'index.php il n'y a que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $controller = new IndexController();
    // On analyse les données
    $controller->ParseQuery();
    $controller->FrontView->Render();
    Pour chaque action différente sur ma page index comme par exemple Marquer les topics comme lu, je vais avoir une méthode dans mon controller comme celle ci dessous.

    Est ce une bonne manière de procéder ?

    Merci déjà de m'avoir lu jusqu'au bout et merci d'avance pour vos futurs commentaires.

    Jo.

  2. #2
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    Je commence aussi à faire du MVC avec du PHP ( c'est bcp plus simple en Java :X ).

    J'ai trouvé qq liens pour pourront surement t'aider :

    http://julien-pauli.developpez.com/t...vc-controleur/
    ftp://ftp-developpez.com/tahe/fichie...mvc-250305.pdf



    Ce sont deux PDF qui explique bien, avec un gros exemple dans le second, mais le premier explique mieux ( à mon gout ) et surtout à partir des bases du MVC.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 42
    Points : 27
    Points
    27
    Par défaut
    Citation Envoyé par Er3van Voir le message
    Je commence aussi à faire du MVC avec du PHP ( c'est bcp plus simple en Java :X ).

    J'ai trouvé qq liens pour pourront surement t'aider :

    http://julien-pauli.developpez.com/t...vc-controleur/
    ftp://ftp-developpez.com/tahe/fichie...mvc-250305.pdf



    Ce sont deux PDF qui explique bien, avec un gros exemple dans le second, mais le premier explique mieux ( à mon gout ) et surtout à partir des bases du MVC.
    Merci mais je les ai déjà lu tous les deux plusieurs fois même car je n'étais pas sur d'avoir tout compris ^^.

    C'est également pour ça que je demande des avis sur ma manière de procéder pour être sur que je ne fais pas d'erreur. Je me suis bien pris la tête la semaine dernière pour savoir si je ne me compliquais pas trop la tache en procéder comme ça. Jusqu'à maintenant je n'ai travaillé que sur des petits sites et les seules séparation de code que j'utilisais c'était des classes pour les données et les calculs sur ces dernières, le controle des actions en début de script et l'affichage en fin de script.

  4. #4
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    Avant tout, j'ai du mal à suivre ton raisonnement, donc y a des chances pour que ce qui va suivre te soit inutile

    Pour répondre à qq questions, tu peux avoir un controller par page ce n'est pas un problème, par contre, j'ai un peu de mal à comprendre ton architecture, t'as des vues dans ton Modèle ? ou c'est juste leur nom ? et t'as englobé le tout dans le controlleur ? A vrai dire ton arbre est bizarre ^^

    A te lire j'ai l'impression que t'as fais une découpe par bloc, et du coup pas vraiment un MVC.

    L'approche comme je la conçoit, mais j'suis pas spécialiste, c'est plutôt de faire d'un côté toutes les méthodes et fonctions => modèle, d'un autre d'attribuer toutes les actions à des méthodes => controleur, et enfin une partie qui récolte toutes les actions et met en place les résultats des fonctions appelées => vue.

    Du coup, j'aurais plutôt séparé comme ça plutôt que par classes. Avec d'un côté tes vues qui elles seules contiennent l'HTML, d'un autre tes fonctions et tes classes, et enfin la partie contrôleur qui gère l'évenementiel, dont effectivement la gestion des pages lues par exemple.

    Cependant, si tu ne bosses que sur des petits projets, et seul, oublie le MVC c'est pas prévu pour ça ! Tu te complique la vie, tu rajoutes du code, et perd un peu en efficacité.
    Le MVC n'a d'intérêt qu'à partir du moment ou la factorisation de code vaut la peine, et si t'es à plusieurs développeurs dessus. L'intérêt étant de pouvoir faire des modifs sur une couche qui ne gêne pas une autre couche où un second développeur fait des modifs, tout en ayant une très bonne portabilité.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 42
    Points : 27
    Points
    27
    Par défaut
    En fait j'ai inverser Footer et FooterView dans mon schema (oui je sais c'est balot ^^)

    En fait mon controller gère tout il crée la facade (modèle) et la vue générale (FrontView)
    La facade gère les différentes classes métiers requises par la page en cours
    La FrontView gère les différentes modules à afficher. Cela me permet de facilement rajouter un bloc d'affichage sur une page (par exemple les statistiques du forum, la liste des connectés). En fait le FrontView construit la page HTML elle récupère des autres blocs des autres classes xView.

    Jo.

    ps: Je peux pas oublier MVC si je veux devenir Developpeur web dans un grosse boite ^^

Discussions similaires

  1. Réponses: 8
    Dernier message: 02/11/2007, 15h36
  2. Vos avis sur mon site de jeux : http://kor6k.free.fr
    Par kor6k dans le forum Mon site
    Réponses: 1
    Dernier message: 28/08/2007, 20h05
  3. Vos avis sur mon site
    Par kodokan dans le forum Mon site
    Réponses: 11
    Dernier message: 10/10/2006, 21h06
  4. Réponses: 1
    Dernier message: 06/10/2006, 21h03
  5. Vos avis sur mon site perso
    Par Fildz dans le forum Mon site
    Réponses: 12
    Dernier message: 19/08/2006, 22h07

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