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

Design Patterns Discussion :

Débutant - Pattern MVC - couplage entre la vue et le controleur


Sujet :

Design Patterns

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de ben.IT
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 431
    Par défaut Débutant - Pattern MVC - couplage entre la vue et le controleur
    Bonjour à tous,

    j'effectue ma première application en utilisant le pattern MVC, je m'interroge sur le couplage entre la vue et le contrôleur.

    Mon application est une application web en GWT (~JAVA) qui doit permettre de gérer un formulaire.

    Pour cela, je suis en train de créer les classes : VueFormulaireCreation & ControleurCreationPersonnage.

    La vue comporte les différents widgets de l'IHM. l'écoute des widget est assurée par la classe ControleurCreationPersonnage qui gère cette tache (implements ClickHandler en GWT)

    Pour cela , cela ma classe VueFormulaireCreation a un attribut de type controleurCreationPersonnage,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            controleurCreationPersonnage = new ControleurCreationPersonnage(this, modeleCreationPerso)  ;
    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
        public VueFormulaireCreation() {
            
            controleurCreationPersonnage = new ControleurCreationPersonnage(this, modeleCreationPerso)  ;
                    
            verticalPanelGeneral = new VerticalPanel();
            verticalPanelGeneral.setSize("200px", "106px");
    
            pNom = new HorizontalPanel();
            pNom.setSpacing(80) ;
            verticalPanelGeneral.add(pNom);
            pNom.setSize("436px", "50px");
    
            lNom = new Label("nom");
            pNom.add(lNom);
    
            tNom = new TextBox();
            pNom.add(tNom);
    
            pCaractPoint = new HorizontalPanel();
            verticalPanelGeneral.add(pCaractPoint);
            pCaractPoint.setSize("436px", "50px");
    
            lCaractPoint = new Label("points de\n caracterisitique");
            pCaractPoint.add(lCaractPoint);
    
            tPointCaract = new TextBox();
            pCaractPoint.add(tPointCaract);
    
            pPointExp = new HorizontalPanel();
            verticalPanelGeneral.add(pPointExp);
            pPointExp.setSize("436px", "50px");
    
            lPointExp = new Label("points d experience");
            pPointExp.add(lPointExp);
    
            tPointExp = new TextBox();
            pPointExp.add(tPointExp);
    
            bEnregistrerPerso = new Button("enregistrer mon perso");
            verticalPanelGeneral.add(bEnregistrerPerso);
            
            bEnregistrerPerso.addClickHandler(controleurCreationPersonnage) ;
            
    //        bEnregistrerPerso.addClickHandler(new ClickHandler() {
    //            public void onClick(ClickEvent event) {
    //                controleurCreationPersonnage.setNom(tNom.getText()) ;
    //                controleurCreationPersonnage.setCaractPoint(tPointCaract.getText()) ;
    //                controleurCreationPersonnage.setExpPoint(tPointExp.getText()) ;
    //            }
    //        });
            
            lFeedback = new Label("feedback");
            verticalPanelGeneral.add(lFeedback);
            lFeedback.setSize("108px", "23px");
        }
    et mon contrôleur a une référence sur la vue afin de pouvoir interagir. Comme par exemple, récupérer les valeurs des champs de texte de la vue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class ControleurCreationPersonnage implements ClickHandler, ChangeHandler, FocusHandler{
    
        private ModeleCreationPerso modeleCreationPerso;
    
        private VueFormulaireCreation vueFormulaireCreation;
        
        private String nom ;
        private String CaractPoint ;
        private String ExpPoint ;
    
        public ControleurCreationPersonnage(VueFormulaireCreation vueFormulaireCreation, ModeleCreationPerso modeleCreationPerso) {
            super();
            this.modeleCreationPerso = modeleCreationPerso;


    Je me demande déjà si mon couplage est correcte, comment assure ton la relation entre la vue et le controleur.

    La vue doit posséder un contrôleur pour vérifier ses données et le contrôleur doit bien être relié à la vue qui l'a créé afin de pouvoir interagir avec elle.

    Je rencontre des difficultés, est ce que quelqu'un pourrait m'orienter sur l'implémentation de ce pattern ...
    merci d'avance,
    benilto

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 97
    Par défaut
    Bonjour,

    Je trouve trouve le couplage entre la vue et le controleur beaucoup trop fort.
    Le MVC est juste un ensemble de patterns.

    La vue communique avec le controleur via le pattern Strategy. Le controleur notifie la couche métier via le pattern Observer. Le metier notifie la vue également via le pattern Observer.

    La vue n'a pas besoin de connaitre explicitement la classe de son controlleur (elle passe par une strategy, qui elle au moins peut être changée en runtime).

    Le controlleur ne DOIT PAS avoir de lien avec la vue. C'est tout l'interet du MVC. Tu changes la vue sans avoir d'impact sur le reste.

Discussions similaires

  1. Design pattern MVC et point d'entrée
    Par rgamor dans le forum Langage
    Réponses: 4
    Dernier message: 31/10/2012, 17h07
  2. [Fabrique] couplage pattern mvc et factory
    Par nine dans le forum Design Patterns
    Réponses: 8
    Dernier message: 02/06/2009, 22h34
  3. Réponses: 4
    Dernier message: 24/02/2009, 12h06
  4. [MVC] lien entre la vue et le modèle
    Par TabrisLeFol dans le forum MVC
    Réponses: 3
    Dernier message: 18/12/2007, 21h59
  5. Réponses: 3
    Dernier message: 07/05/2002, 16h06

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