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

MVC Discussion :

Avis sur architecture de mon MVC


Sujet :

MVC

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Avis sur architecture de mon MVC
    Bonjour à tous !

    Je suis actuellement en train d'apprendre l'architecture MVC, j'ai donc modifié un projet perso à l'aide de celle-ci, mais je ne suis pas certain d'avoir découpé correctement celui-ci.

    Le projet est un site de locations d'appartements, l'admin du site peut ainsi gérer des réservations qui apparaissent ensuite au niveau de l'espace public dans un calendrier. Il peut aussi modifier le contenu des pages de son site avec ckeditor.

    Je me retrouve donc avec plusieurs vues dont certaines que j'ai réunies dans un seul dossier.

    Par exemple dans mes vues j'ai un seul dossier réservations qui comprend les vues :
    - Ajout_reservation.php (formulaire html)
    - Modif_reservation.php (formulaire html)
    - Choix_reservation.php (formulaire qui permet de choisir dans une liste déroulante la location dont on souhaite voir les réservations)
    - Liste_reservation.php (affiche la liste des réservations pour la location choisie)

    Ces vues sont appelées par un controlleur reservation.php.

    On retrouve dans ce controlleur par exemple la methode modifier qui gère l'appel des pages liées à la modification d'une reservation.

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
            function modifier() {
                
                        $anneeN= date('Y');
                        if (isset($_POST["loc"])){$numloc1=$_POST["loc"]; $anneepost=$_POST["anneepost1"]; }else{$numloc1=0; $anneepost=$anneeN;}
                        
                    if (isset($_GET["num"]) ) // si un numero de réservation est envoyé
                    {
                                
                                $numreserv=$_GET['num'];
                                $reserv = new reservation; 
    
                                //si l'admin souhaite supprimer une reservation, alors...
                                if( (isset($_GET["type"])) && ($_GET["type"]=="suppr"))
                                {             
                                        ob_start();
                                        require(ROOT."views/reservations/choix-reserv.php");
                                   
                                        // on vérifie si la réservation existe et on la supprime
                                        if($reserv->recherche($numreserv)!==0)
                                        {
                                                $reserv->suppr($numreserv);
                                                echo "</br></br></br><span class='notification'>Suppression effectuée</span>";                             
                                        }
                                        else
                                        {
                                                echo "</br></br></br><span class='notification'>La réservation n'existe pas !</span>";  
                                        }
                                      
                                        $content_for_page=  ob_get_clean();  
                                        require(ROOT.'views/layout/'.$this->layout.'.php');
                                }
                                else
                                {       //on affiche le formulaire de modification de la réservation choisie      
                                        $reserv->recherche($numreserv);
                                        $this->set($reserv->tabval());
                                        $this->render("modif_reservation");    
                                }
    
                    } 
                    else // si aucun numero de réservation n'est envoyé
                    { 
                       
                        ob_start();
                        require(ROOT."views/reservations/choix-reserv.php");
    
                        if (isset($_POST["loc"]))
                        {
                            $tab=listereserv();
                            $typespan=$tab[1];
                            $req=$tab[0];
    
                                if (mysql_num_rows($req)>0)
                                {
                                    require(ROOT."views/reservations/liste-reserv.php");
    
                                 }
                                 else
                                 {
                                    echo "</br> </br> <span class='notification'>Aucune réservation pour cette location !</span>";
                                 }
    
                            echo "</table>";      
                       }
    
                                    $content_for_page=  ob_get_clean();  
                                require(ROOT.'views/layout/'.$this->layout.'.php');
                   }
            }
    Le code n'est pas parfait, j'ai en effet une methode render qui ne me permet pas d'afficher un echo de mes notifications en cas de besoin, je dois donc réécrire les appels de mes pages lorsqu'il y a des notifications à afficher. (par ex : Aucune réservation pour cette location)

    Peut être devrais-je ajouter dans ma methode render un paramètre $notification qui s'il est renseigné serait affiché dans un echo à partir de celle-ci ?

    Merci de me dire si j'ai bien compris la methode MVC où si je dois d'avantage découper mon site. Je suis également ouvert à toute idée d'amélioration de mon code

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 89
    Points : 170
    Points
    170
    Par défaut
    Bonjour,

    Je vais essayer de répondre, mais je ne suis plus très habitué des contraintes du développement web, donc je serai peut être à côté de la plaque .

    Le premier point est que le controleur a l'air de tout faire : je suppose que la fonction render va afficher la vue? On voit également un mysql_num_rows qui traine, je dirais qu'a priori ce genre d'appel devrait être reservé au modèle?

    C'est effectivement au controleur de gérer la requête HTTP et de demander au modèle d'effectuer les changements demandés, mais pour moi ce n'est pas à lui de demander d'afficher la vue. Il devrait y avoir une entité 'maître' qui en premier lieu demanderait au controleur de gérer la requête, puis demander à la vue (sélectionnée par le controleur) de s'afficher.

    Autre point, le contrôleur affiche DIRECTEMENT du contenu. Les fameuses notifications, mais également un "</table>". C'est évidemment à la vue de s'occuper de ce genre de tâche. Pour s'en convaincre, on peut se demander comment cela va se comporter lorsque, par exemple, on décidera que la vue ne doit plus utiliser de table HTML, ou pire ne plus être du tout en HTML?

    Ensuite pour répondre plus précisément à la question, normalement la vue affiche l'état du modèle. Si une notification doit apparaître dans la vue, elle doit donc provenir du modèle.

    En gros ça peut donner un déroulement de ce type :
    • L'entité maître reçoit la requête HTTP, choisit le controleur adéquat et lui transmet cette requête
    • Le contrôleur traduit la requête en action à produire sur le modèle
    • Le modèle effectue les mises à jour demandées (en fixant par exemple une variable $notification le cas échéant) et renvoit éventuellement un résultat au contrôleur.
    • En fonction de cet éventuel retour, le controleur va sélectionner la vue adéquat et rendre la main
    • L'entité maître demande à la vue de s'afficher
    • La vue demande au modèle les informations nécessaires à l'affichage (notamment quelles sont les éventuelles notifications à afficher)


    Dans le code présenté je ne vois pas trop où se situe le modèle. Ca a l'air d'être l'objet reservation, mais il n'apparaît pas dans le dernier cas. Attention donc à ne pas considérer que le modèle est uniquement représenté par la base de données. Il doit bien sûr contenir les données, mais également établir les règles de mises à jour de ces données, et en cas de violation de ces règles, être capable de l'indiquer.

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/09/2011, 08h20
  2. Avis sur architecture
    Par Rolf-IV dans le forum Langage
    Réponses: 5
    Dernier message: 18/12/2009, 02h48
  3. [Avis] Sur quoi poursuivre mon apprentissage?
    Par Jean-Michel Ormes dans le forum Débuter
    Réponses: 10
    Dernier message: 03/09/2009, 16h09
  4. Avis sur design de mon site
    Par Deadgamer dans le forum Mon site
    Réponses: 8
    Dernier message: 17/11/2006, 20h27
  5. [débutant] besoin d'avis sur architecture de base.
    Par Mathusalem dans le forum Oracle
    Réponses: 3
    Dernier message: 14/11/2006, 15h43

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