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 :

Utiliser le MVC sans framework


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 162
    Par défaut Utiliser le MVC sans framework
    Bonjour,
    je viens vous voir car je démarre la réalisation d'un site php , et cette fois-ci j'ai envie de passer à du PHP objet.

    J'ai décidé d'utiliser l'organisation MVC pour bien séparer mes couches, par contre je ne souhaites pas utiliser de framework déjà tout fait.

    Je viens donc ici pour vous exposer la manière avec laquelle je compte procéder, afin d'avoir vos remarques et vos corrections/optimisations si nécessaire.

    Donc prenons l'exemple de mon site il y aura une table MEMBRE, une table petite annonces par exemple.
    Voici l'arborescence que je comptais utiliser:
    • index.php
    • /models/GenericDBStorer.php
    • /models/MembreDBStorer.php
    • /models/AnnonceDBStorer.php
    • /views/GenericView.php
    • /views/MembreView.php
    • /views/AnnonceView.php
    • /controllers/GenericTask.php
    • /controllers/MembreTask.php
    • /controllers/AnnonceTask.php



    Donc voila sur ce petit exemple. Pour ce qui est de la partie des models pas de PB, j'ai ma classe principale GenericDBStorer.php qui implémente les principales fonctions ( readAll() , save () , read(id) , load() ) et tous mes autres models héritent de celle là.

    par contre là ou ça se corse, c'est au niveau des vues je n'arrive pas à trouver un intérêt à les utiliser dans le MVC car je n'arrive pas à trouver forcément un gain de temps, car chaque vue sera différente?( donc rien à factoriser ? )

    Habituellement dans mes sites je fais qque chose dans ce genre (index.php ):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <div id="contenu">
    <?php 
    if exists($page.".php")
    {
        include($page.".php");
    }
    ?>
    </div>
    Dans l'url je passe par exemple : index.php?page=membre
    et donc j'inclus membre.php et c'est membre.php qui affiche la liste des membres.
    Ou bien je passe index.php?p=membreDetail&amp;id=3
    j'affiche ainsi les infos du membre 3. (inclusion de membreDetail.php)
    Ou alors index.php?p=editerMembre
    Là l'utilisateur (loggé sur sa SESSION) arrive sur la page editerMembre.php avec $_SESSION["id_mb"] comme paramètre pour récupérer ces valeurs...

    Donc est ce que c'est à ce niveau là que mon controller va devoir agir ?
    Si je fais passer index.php?p=membre&amp;action=voir
    est ce que je devrais faire qque chose du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <div id="contenu">
    <?php 
    //Charge le controller demandé
    GenericTask::loadController($page."Task");
    MembreTask->voir($page);
    ?>
    </div>
    et donc dans MembreTask.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class MembreTask.php extends GenericTask
    {
    public $page;
     
    GenericDBStorer::load($this->page);
    MembreDBStorer->readAll();
    MembreView->voir() ?????
    }
    En fait je ne comprend pas trop l'interaction avec la vue, je ne sais pas trop quelles fonctions y mettre à l'intérieur , et qu'elle intérêt de faire hériter toutes mes vues d'une vue générique si je ne peux rien factoriser.. ?

    Voila j'attends vos conseils et avis
    Et merci à tous ceux qui vont prendre le temps de lire mon message .
    bye

  2. #2
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Citation Envoyé par rockt13 Voir le message
    par contre là ou ça se corse, c'est au niveau des vues je n'arrive pas à trouver un intérêt à les utiliser dans le MVC car je n'arrive pas à trouver forcément un gain de temps, car chaque vue sera différente?( donc rien à factoriser ? )
    En fait dans les frameworks, pour gérer le code redondant des vues, beaucoup proposent un layout, un code qui est inclu automatiquement (ou non) dans chacune de tes vues afin de gérer par exemple les headers, footers etc...

    Par contre, n'assimile pas les frameworks et plus généralement les MVC à un gain de temps (au sens exécution du programme). C'est généralement bien plus long comme temps d'exécution qu'un code "fouillis".

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 162
    Par défaut
    Salut Madfrix,
    En fait moi je pensais plutôt à gain de temps au sens développement.

    par contre du coup tu me dis que le temps d'exécution ( donc de chargement de mes pages ) sera plus long ?

  4. #4
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Tout depend la complexité de ton code MVC mais pour zend par exemple, tu as une multitude de pages php incluses, de plugins lancés, d'allers retours etc...qui font que naturellement le temps d'exécution sera plus long. En contre partie, le temps de programmation, maintenance sera beaucoup plus rapide.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 162
    Par défaut
    Ok merci pour cette précision

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 162
    Par défaut
    Que pensez vous d'un index.php qui ressemble à ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <?php
     
    require "core.php";
     
    ?>
     
    <title>blabla</title>
    <link rel="stylesheet" href="ressources/css/style.css" type="text/css" />
     
    </head>
    <body >
        <div id="page">
            <div id="header">
                <div id="inlogin">
                    <div class="inlogin">
                    <?php include("inlogin.php"); ?>
                    </div>
                </div>
            </div>
            <div id="centre">
                <div id="menu_gauche">
                </div>
                <div id="contenu">
                    <?php
                    genericController::route($_GET[]);
                    ?>
                </div>
            </div>
     
        </div>
     
            <div id="footer">
            </div>
     
    </body>
    </html>
    et d'un controller qui ressemble à cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    <?php
    class genericController{
     
        public static function route($v = array())    
        {
            if(isset($v["action"]))
            {
                $action= $v["action"];
                $storer = genericDBStorer::load($v["page"]);
                switch($action)
                {
     
                    case "voir": if(isset($v["id"]))
                                    {
                                        if($storer!=0)$storer->readOne("*",$v['id']);
                                        $view=genericView::load($v["page"]);
                                        $view->voir($storer);                                                                        
                                    }
     
                                    break;
                    case "editer":if(isset($v["id"]))
                                    {
                                        if($storer!=0)$storer->readOne("*",$v['id']);
                                        $view=genericView::load($v["page"]);
                                        $view->editer($storer);                                                                        
                                    }
                                    break;
                    case "lister":
                                        if($storer!=0)$storer->readAll();
                                        $view=genericView::load($v["page"]);
                                        $view->lister($storer);                                                                        
     
                                    break;
                }
     
     
            }
            elseif(isset($v["page"]) && !isset($v["action"]))
            {
                    $page=$v["page"];
                    if(file_exists($page.".php"))
                    {
                        include("$page.php");
                    }
            }
     
        }
    }
    ?>
    Est ce que en faisant ceci c'est vraiment du MVC? est ce que cest optimisable ?

  7. #7
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Citation Envoyé par rockt13 Voir le message
    Salut Madfrix,
    En fait moi je pensais plutôt à gain de temps au sens développement.

    par contre du coup tu me dis que le temps d'exécution ( donc de chargement de mes pages ) sera plus long ?
    Bien sûr que le temps de traitement sera plus long, comme bien expliqué par Madfrix.
    De plus, la rapidité de développement est-elle vraiment le plus important dans un framework comme zend ?
    AMHA non.
    Le plus grand avantage que je vois à cette architecture est sa souplesse, pour y ajouter des plugins par exemple. Si ton appli n'a pas vocation à être distribuée et "modée", franchement, le MVC perd pas mal de ses avantages et ne perd aucun de ses inconvénients.

    Demandes à Rasmus ce qu'il pense du MVC...

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 162
    Par défaut
    comme je l'ai dit au départ, je ne souhaite pas utiliser de ZendFramework ou autre .

    Vous me conseillez donc de rester sur un code procédural plutôt fouillu ?

  9. #9
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Citation Envoyé par rockt13 Voir le message
    comme je l'ai dit au départ, je ne souhaite pas utiliser de ZendFramework ou autre .

    Vous me conseillez donc de rester sur un code procédural plutôt fouillu ?
    Pourquoi réinventer la roue ?

    De plus, un code procédural n'est pas forcément horrible, en utilisant les bons éléments de POO en cerise sur le gâteau.

    Prenons un exemple simple : ce forum. A ma connaissance, phpBB n'est pas MVC et ça ne l'empêche pas d'être un leader sur son secteur.

Discussions similaires

  1. Modele d'architecture MVC sans framework
    Par sputnick dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 26/05/2011, 11h56
  2. [PHP 5.0] [Optimisation] - MVC, avec ou sans POO ? Avec ou sans Framework ?
    Par Astriel dans le forum Langage
    Réponses: 10
    Dernier message: 07/02/2011, 14h32
  3. Architecture MVC sans framework
    Par JLC83 dans le forum Langage
    Réponses: 5
    Dernier message: 19/08/2010, 10h29
  4. Mise en place MVC sans framework dédié
    Par Pwill dans le forum Flex
    Réponses: 4
    Dernier message: 01/06/2010, 09h27
  5. Réponses: 5
    Dernier message: 09/08/2008, 19h59

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