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 :

MVC et dépendance circulaire de projets


Sujet :

MVC

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    septembre 2006
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : septembre 2006
    Messages : 198
    Points : 106
    Points
    106
    Par défaut MVC et dépendance circulaire de projets
    Bonjour,

    Imaginons que nous avons trois classes simple représentant le pattern MVC.

    1. MonModele
    2. MonControler
    3. MaVue


    Idéalement, j'aurai tendance à séparer ma solution (ensemble de projets) en 3 parties (projets).

    1. Business
    2. Controler
    3. View


    • La projet de la classe "MonControleur" doit donc inclure dans ses dépendances le projet (ou dll) "View" car elle doit mettre à jour la vue. "Controler" inclut "View"
    • Le projet de la classe "MaVue" doit donc incure le projet "Controler" car elle doit avertir le controlleur des évènements utilisateur. "View" inclut "Controler"


    On a donc une dépendance circulaire interdite.

    Comment pallier à ce problème?
    Peut-être est-ce simplement ma séparation de classe qui est mauvaise ou non nécessaire ?

    Merci d'avance

  2. #2
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    14 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 14 599
    Points : 24 765
    Points
    24 765
    Par défaut
    Salut,
    Je ne comprends pas trop ce que recouvre la notion de "projet"... et donc je ne comprends pas non plus pourquoi les relations entre "composants" devraient se limiter à la seule inclusion...
    Exemple:
    La projet de la classe "MonControleur" doit donc inclure dans ses dépendances le projet (ou dll) "View" car elle doit mettre à jour la vue. "Controler" inclut "View"
    Au mieux, le contrôleur doit pouvoir dire aux Views existantes de se mettre a jour si nécessaire car les données du modèle on changé... Il y a moultes façons de réaliser cette mécanique (le pattern Observer est un exemple) sans couplage "fort" entre Views et Controllers....
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    septembre 2006
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : septembre 2006
    Messages : 198
    Points : 106
    Points
    106
    Par défaut
    La notion de projet existe peut-être uniquement dans Visual.

    Au lieu de parler de projet, on peut parler de .DLL.

    Imaginons une dll contenant toutes les vues, et une dll contenant tous les contrôleurs.

    La dll des vues et celles des controleurs s'inclut mutuellement. Car le controlleur d'une vue reçoit parfois (d'après certains tutos) en paramètre la vue. Et donc cela crée une dépendances circulaire.

    Si j'ai bien compris ta solution est d'utiliser le pattern Observer situé dans une autre dll ?


    Merci à toi

  4. #4
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    14 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 14 599
    Points : 24 765
    Points
    24 765
    Par défaut
    Salut,
    Citation Envoyé par AsPrO Voir le message
    Imaginons une dll contenant toutes les vues, et une dll contenant tous les contrôleurs.
    C'est une contrainte de déploiement qui est sans rapport avec le pattern MVC: la question serait-elle "comment interfacer controller et views s'ils sont dans les DLL différents"?
    Si j'ai bien compris ta solution est d'utiliser le pattern Observer situé dans une autre dll ?
    Pour moi déployer "Views, Controllers, Model" dans des DLL différents est une solution... qui va demander des pré-requis pour être mise en oeuvre compte tenu des liens que devront avoir les différents "objets".
    Quel sont les problèmes que vous cherchez à résoudre en optant pour un tel déploiement?
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    septembre 2006
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : septembre 2006
    Messages : 198
    Points : 106
    Points
    106
    Par défaut
    Je cherche à regrouper, dans une dll, les classes par utilités de façon à minimiser le nombre de classes par dll.

    C'est un peu comme essayer de diviser le code d'une classe trop grande en plusieurs petites classes avec un rôle par classe.

    Ca me semblait évident que les contrôleurs et les vues avaient un rôle différent et devait donc être séparés.

    Mais peut-être n'est ce pas judicieux ?

    Merci

  6. #6
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    14 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 14 599
    Points : 24 765
    Points
    24 765
    Par défaut
    Salut,
    Je cherche à regrouper, dans une dll, les classes par utilités de façon à minimiser le nombre de classes par dll.
    On peut considérer une DLL comme un composant de type "plugins": si vous ne changez pas les API, on peut faire évoluer la réalisation indépendamment du reste. Mais il va falloir définir une API i.e. les interfaces. Ce qui est plus ou moins facile suivant le langage, l'OS, ...
    C'est un peu comme essayer de diviser le code d'une classe trop grande en plusieurs petites classes avec un rôle par classe.
    Dans ce cas, on peut se contenter de définir des interfaces. La classe originale se contente de les implémenter. Mais le lien de délégation est résolu "à la compile". Dans le cas DLL, il faudra définir l'interface - pour que çà compile - mais comme la compilation sera séparée, il va falloir recoller les bouts au chargement des DLL.
    Ca me semblait évident que les contrôleurs et les vues avaient un rôle différent et devait donc être séparés.
    Ben, vous pouvez les mettre dans des fichiers sources "différents"... et même dans des DLLs différents, mais les difficultés ne seront pas les mêmes...
    Note: Je ne sais pas quel GUI vous utilisez mais en général, ils proposent des classes de type Widgets qui intègrent la capture et le déclenchement des évènements. i.e. une partie de la logique du "controller". Ce n'est pas simple à séparer! Par contre, vous voudrez sans doute pouvoir tester indépendamment les actions effectuées sur le Modèle. Ce qui motive peut être un packaging séparé.
    Mais peut-être n'est ce pas judicieux ?
    Dans la mesure ou il faudra de toutes façons charger les différentes DLL, ce n'est "judicieux" (à mon sens) que pour les faire évoluer indépendamment les unes des autres. Si vous ne devez pas satisfaire une telle exigence, c'est peut être compliquer les choses pour rien.
    - W
    PS: Ceci dit, je ne suis pas dans votre tête et sans connaître le contexte vous défendez peut être mal une très bonne idée.
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2004
    Messages : 1 883
    Points : 3 500
    Points
    3 500
    Billets dans le blog
    2
    Par défaut
    Fais du MVC2 et tu n'auras pas de problème de référence circulaire

  8. #8
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2008
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : avril 2008
    Messages : 231
    Points : 357
    Points
    357
    Par défaut
    Bonjour,

    Sinon dans le Pattern MVC tu rajoutes un Pattern Observer qui te permet de mettre à jour les données de la View sans que le Controller ai connaissance de la DLL de la Vue ?

    http://cdelmas.developpez.com/articl...du-modele-mvc/

    "Une belle citation est un diamant au doigt de l'homme d'esprit et un caillou dans la main d'un sot."
    Joseph Roux

Discussions similaires

  1. [EJB3] [JBoss] Injection de dépendance circulaire ?
    Par Claythest dans le forum Java EE
    Réponses: 6
    Dernier message: 04/08/2009, 09h11
  2. Référence circulaire entre projets VS2005
    Par Captain_JS dans le forum C++
    Réponses: 8
    Dernier message: 23/07/2008, 03h42
  3. Problèeme de dépendances circulaires entre EJBs et JBoss
    Par developpeur2008 dans le forum Wildfly/JBoss
    Réponses: 1
    Dernier message: 08/06/2008, 21h03
  4. Lister les fichiers et les dépendances liés à un projet
    Par sovo dans le forum Vos contributions VB6
    Réponses: 19
    Dernier message: 24/10/2007, 23h57
  5. Utilitaire pour voir les dépendances d'un projet
    Par Najdar dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 02/11/2006, 22h56

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