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 :

Lien contrôleur - vue


Sujet :

MVC

Vue hybride

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 47
    Par défaut Lien contrôleur - vue
    Bonjour,

    Je ne connais pas trop MVC. En fait, je cherche plutôt à implémenter MVC2 puisque je n'ai qu'un contrôleur unique.

    D'après ce que j'ai compris, le contrôleur "capte" les évènements issus de la vue. Sur ce point, pas de problème.

    En revanche, comment se fait la liaison dans l'autre sens ? Est-ce qu'on peut gérer sous forme d'un pattern observateur (la vue observe le contrôleur) ? Est-ce que le contrôleur appelle directement des méthodes situées dans les objets de la vue ?

    Merci d'avance pour votre aide.

    Benoît

  2. #2
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Le contrôleur en question, dans le pattern d'architecture MVC, est un pattern(de responsabilité).

    Pour l'implémentation, en fait c'est lié à un autre pattern de responsabilité : le créateur. Qui crée la vue et qui crée le contrôleur ? Pour la vue la particularité est dans la première création puisqu'après une vue peut créer une vue donc la réponse est le contrôleur. Mais pour le contrôleur en fait cela peut être les 2.


    Dans un diagramme de classe ou de package les dépendances "normales" sont plutôt de la vue vers le contrôleur(pour les attributs tandis que pour les paramètres de méthodes les dépendances dans les 2 sens sont "normales"), il est préférable d'utiliser des interfaces pour dépendances dans le meilleur des cas que se soit dans un constructeur ou une méthode de classe

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 47
    Par défaut
    Bonjour,

    Tout d'abord, merci d'avoir pris le temps de me répondre.

    Qui crée la vue et qui crée le contrôleur ? ... la réponse est le contrôleur
    Ok, compris.

    Mais pour le contrôleur en fait cela peut être les 2.
    Pouvez-vous préciser ? Je n'ai pas bien compris cette phrase .

    les dépendances "normales" sont plutôt de la vue vers le contrôleur
    Autrement dit, la vue dépend du contrôleur ? La vue va faire appel à des méthodes du contrôleur ?
    Pour ma part, je me suis attaché à ce que tous les évènements émis depuis la vue soient gérés par le contrôleur... Ma vue ignore tout du contrôleur.

    il est préférable d'utiliser des interfaces pour dépendances dans le meilleur des cas que se soit dans un constructeur ou une méthode de classe
    Désolé mais je n'ai pas bien suivi là-aussi. Un petit exemple ou un lien vers une doc ?

    Benoît

  4. #4
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par Bertrand_g Voir le message

    Pouvez-vous préciser ? Je n'ai pas bien compris cette phrase .
    Cela veut dire que le contrôleur peut être créer par la vue ou pas.

    Code où il est créé dans 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
    14
    public class Vue : Form, IVue
    {
    
      private IControleur _controleur;
      public Vue()
      {
        _controleur = new Controleur();
      }
    
      public void ClicButton()
    {
    _controleur.ClicButton();
    }
    }
    code où il n'est pas crée dans la vue mais passé en paramètre à son constructeur.

    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
    public class Vue : Form, IVue
    {
    
      private IControleur _controleur;
      public Vue(IControleur controleur)
      {
        _controleur = controleur;
      }
    
      public void ClicButton()
    {
    _controleur.ClicButton();
    
    //ou alors en passant en paramètre la vue en tant qu'interface
    //c'est très courant aussi et très pratique puisque le controleur va vraiment controler la vue et lui dire quoi faire en appelant les méthodes de la vue qui vont bien
    _controleur.ClicButton(this)
    }
    }

    Autrement dit, la vue dépend du contrôleur ? La vue va faire appel à des méthodes du contrôleur ?
    oui. Pour rappel le pattern contrôleur réponds à la problématique : "A qui envoyer un message provenant d'une IHM ? " La réponse est : au contrôleur. Donc oui la vue va fairfe appel à des méthodes du contrôleur.


    Pour ma part, je me suis attaché à ce que tous les évènements émis depuis la vue soient gérés par le contrôleur... Ma vue ignore tout du contrôleur.
    J'ai du mal à comprendre comment tu peux émettre depuis la vue des événements gérés par un contrôleur sans dépendance aucune..Avec des variables gloabales ?


    Désolé mais je n'ai pas bien suivi là-aussi. Un petit exemple ou un lien vers une doc ?
    Travailler avec les interfaces permets de diminuer le couplage entre couche d'une part et d'autre part de diminuer aussi les dépéndances et de les inverser (voir le I d'un ensemble de principe de conception nommé SOLID (il y a un tuto sur le site)

    Dans mon exemple de code plus haut tu peux voir que j'ai une interface de controleur et une interface de vue. Pose des questions à partir de cela si cela n'est pas clair

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 47
    Par défaut
    Cela veut dire que le contrôleur peut être créer par la vue ou pas.
    Ok.

    Merci pour les exemples. C'est parfaitement clair désormais.

    J'ai du mal à comprendre comment tu peux émettre depuis la vue des événements gérés par un contrôleur sans dépendance aucune..Avec des variables gloabales ?
    Pour préciser les choses, je code en c++ avec wxWidgets.
    Pour l'instant, j'ai créé indépendamment la fenêtre principale et le contrôleur dans la méthode "OnInit()" de mon application (l'équivalent du main). Toujours dans ce main, je lie dynamiquement les évènements générés par l'ihm à des méthodes du contrôleur. Dans le code de la vue, il n'y a pas de référence au contrôleur. Par contre, le contrôleur contient une référence vers la vue et appelle explicitement des méthodes de la vue. Je ne sais pas si c'est une bonne méthode...

    Dans mon exemple de code plus haut tu peux voir que j'ai une interface de controleur et une interface de vue. Pose des questions à partir de cela si cela n'est pas clair
    Cette fois, j'ai parfaitement compris ton explication.

    Merci.

    Benoît

  6. #6
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par Bertrand_g Voir le message
    Pour préciser les choses, je code en c++ avec wxWidgets.
    Pour l'instant, j'ai créé indépendamment la fenêtre principale et le contrôleur dans la méthode "OnInit()" de mon application (l'équivalent du main). Toujours dans ce main, je lie dynamiquement les évènements générés par l'ihm à des méthodes du contrôleur. Dans le code de la vue, il n'y a pas de référence au contrôleur. Par contre, le contrôleur contient une référence vers la vue et appelle explicitement des méthodes de la vue. Je ne sais pas si c'est une bonne méthode...
    Cela veut dire que tout les événements de clic bouton de la vue sont redirigés vers une méthode du contrôleur ? si je comprends bien, tu n'as aucun code dans les click des boutons de la vue ou alors du code lié à de l'affichage ?

    Cela ne me semble pas si mauvais que cela. Après dans la "normalité", MVC voudrait plutôt que ta vue à une dépendance vers un contrôleur et que le contrôleur n'a pas de dépendance vers la vue. Mais vu le nombre de variante de ce pattern (qui découle lui même du pattern en couche avec pleins de variantes) ta solution est acceptable.

Discussions similaires

  1. [AJAX] Séparation contrôleur / vue et Ajax
    Par CinePhil dans le forum AJAX
    Réponses: 15
    Dernier message: 21/01/2013, 10h54
  2. [RCP / JFace / SWT] Lien entre vues
    Par papaetoo dans le forum SWT/JFace
    Réponses: 14
    Dernier message: 18/03/2010, 10h07
  3. Champ de texte et MVC (modèle vue contrôleur)
    Par three minute hero dans le forum Windows
    Réponses: 1
    Dernier message: 22/02/2007, 11h04
  4. Réponses: 1
    Dernier message: 19/04/2006, 16h32
  5. Lien entre les vues 'Structure' et l'éditeur
    Par Tifauv' dans le forum Eclipse Platform
    Réponses: 3
    Dernier message: 13/05/2004, 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