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 :

[Java] Pattern pour la communication IHM Métier


Sujet :

Design Patterns

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 15
    Points : 7
    Points
    7
    Par défaut [Java] Pattern pour la communication IHM Métier
    Bonjour,
    Je suis en train de creer un logiciel en java et j'aurais besoin d'un avis pour voir si je me trompe sur un point.
    Je voulais utiliser Observer/Observable pour faire communiquer la partie IHM et la partie Métier.
    Seulement étant donné que l'extends est limité, j'ai utilisé des classes internes du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
         
    /* Classe interne qui fait observer les modifications */
    class Observe extends Observable{
        public void notifier() {
            super.setChanged();
            super.notifyObservers();
        }
        public void notifier(Object p) {
            super.setChanged();
            super.notifyObservers(p);
         }           
    }
    J'aurais aimé avoir votre avis sur la pertinence de cette méthode.

  2. #2
    Membre confirmé Avatar de broumbroum
    Profil pro
    Inscrit en
    Août 2006
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 406
    Points : 465
    Points
    465
    Par défaut
    je comprends pas bien le terme classe interne. As-tu un Observer pour chaque "Observe"? Sinon le code est clair. Tu peux meme supprimer les appels "super" par des appels plus courts: setChanged() et notifyObservers()

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    merci pour avoir déplacé au bon endroit

    En fait il y a qu'un seule classe Observer qui en observe plusieurs. Dans ces dernières, j'ai opté pour créer une classe à l'intérieur de la classe qui à cette tete là.
    Ma question est de savoir si c'est une bonne solution, ou s'il vaut mieux creer une seule classe sous-classe d'Observable, une sorte de gestionnaire.
    Pour résumer, j'ai les classes A,B,C qui implemente ce code et qui sont écoutés par D. N'est il pas mieux de creer une classe E qui soit une sous-classe d'Observable et qui est écouté par D, et à laquelle A,B et C indique qu'elles ont été modifiés.
    Je suis pas sur d'etre tres clair

  4. #4
    Membre confirmé Avatar de broumbroum
    Profil pro
    Inscrit en
    Août 2006
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 406
    Points : 465
    Points
    465
    Par défaut
    c'est une bonne methode. A partir d'une instance vers plusieurs objets tu obtiens un lien "1 <- infini" tres pratique.

  5. #5
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Tout au début où j'ai appris ce concept d'Observer / Listener, j'utilisais Observer/Observable, car si elles étaient là, ça ne devait pas être pour rien.

    Mais à l'utilisation, et quand il y a beaucoup d'évènements différents à observer, cela devient ingérable et pas pratique. De plus, on peut voir que dans toute l'api java, notamment Swing, elles ne sont pas utilisées, au profit du principe des listeners (addMachinListener...).

    Si tu veux j'ai écrit un tuto sur la création de listeners:
    http://rom.developpez.com/java-listeners

  6. #6
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    @ broumbroum : C'est laquelle de solution que tu trouves bien? la classe interne Observe ou la classe gestionnaire?

    @ ®om : je m'en vais lire ça tout de suite

  7. #7
    Membre confirmé Avatar de broumbroum
    Profil pro
    Inscrit en
    Août 2006
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 406
    Points : 465
    Points
    465
    Par défaut
    Citation Envoyé par flool
    @ broumbroum : la classe interne en fait

  8. #8
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Merci. Je vais essayer avec ta méthode ®om, pour voir si cela marchera bien dans mon cas.

  9. #9
    Membre actif Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Points : 294
    Points
    294
    Par défaut
    Attention : les classes de type "Ecouteur" ne remplissent pas le même rôle que les "Observeur".

    pour faire simple :

    -tes panels ( ou autres éléments IHM ) sont à la fois des écouteurs qui réagissent aux évènements utilisateurs ( click, scroll...) et à la fois des Observeurs qui rendent compte de l'état du Document ( ou Métier ou Modèle ).

    -tes classes métiers sont observés par tes panels et, en ce sens, implémentent l'interface 'Observable'.

    Ainsi quand ton IHM reçoit un click souris, elle transmet au Contrôleur qui modifie le Document qui déclenchent le 'notifyObservers'. Les vues reçoivent l'évènement dans la méthode 'update' et se redéssinent.
    Hope it helps !
    Nouveau ! Il y a une vie après le java, oxygénez-vous

  10. #10
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Donc si je comprends bien, l'ihm reçoit un clic de souris, le dit à la partie métier et ensuite cette dernière indique à l'ihm, par un notifyobserver, qu'elle a changée.
    Et selon toi, la première communication doit se faire comment? Encore Observer/Observable? EventListener?

  11. #11
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Citation Envoyé par g0up1l
    Attention : les classes de type "Ecouteur" ne remplissent pas le même rôle que les "Observeur".
    L'implantation est différente, mais le concept est le meme...

  12. #12
    Membre du Club
    Profil pro
    Développeur .NET
    Inscrit en
    Mai 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 50
    Points : 55
    Points
    55
    Par défaut
    Je rejoins g0up1l sur le principe que écouteurs et observeurs ne sont pas la même chose conceptuellement. Un écouteur est plutôt fait pour intercepter des actions utilisateurs et pas pour regarder ce qui se fait côté métier.

    Par conséquent, il ne faut pas les utiliser l'un à la place de l'autre et n'importe quand. Un des risques dans ce cas, c'est qu'une personne qui passera derrière aura du mal à comprendre le code car elle trouvera un écouteur là elle s'attendrait à voir un observeur.

    Donc si je comprends bien, l'ihm reçoit un clic de souris, le dit à la partie métier et ensuite cette dernière indique à l'ihm, par un notifyobserver, qu'elle a changée.
    L'IHM reçoit un clic de souris, elle en parle à un contrôleur qui transmettra comme au différentes classes métier, et qui elles indiqueront à l'IHM via les notifyObserver qu'elles ont changé.
    Parfois (souvent ?), le contrôleur ne fait que transmettre directement à un objet métier. On peut alors être tenté de contacter directement l'objet métier depuis l'IHM. Mais soit on applique MVC à la lettre, soit on ne l'applique pas. Car il y a toujours le même problème, si quelqu'un passe derrière, il aura du mal à comprendre un code qui est écrit différemment de ce qu'il devrait être. Sans parler des problèmes éventuels de maintenance...

  13. #13
    Membre éclairé Avatar de bassim
    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Février 2005
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 666
    Points : 695
    Points
    695
    Par défaut
    On peut alors être tenté de contacter directement l'objet métier depuis l'IHM. Mais soit on applique MVC à la lettre, soit on ne l'applique pas
    sauf si on fusionne la vue avec le controleur du genre M(VC)
    Where is my mind

  14. #14
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    La classe Observable et l'interface Observer sont totalement inutilisable en pratique s'il y a plein de choses à écouter... Avec des arguments Observable et Object, on est obligé de tester tous les cas (et de faire les cast) dans les Observers... Et on peut ajouter des Observers à des objets pas du tout prévus pour les évènements qui seront déclenchés (aucune autre vérication de type que Observer).

Discussions similaires

  1. Bonnes pratiques pour développer une IHM en JAVA
    Par jeromeSERRE dans le forum Interfaces Graphiques en Java
    Réponses: 13
    Dernier message: 20/11/2010, 19h17
  2. Question pour début communication entre applications java
    Par MrEddy dans le forum Général Java
    Réponses: 12
    Dernier message: 08/04/2010, 12h15
  3. [JAVA] Quel EDI JAVA choisir pour Mac OS X ?
    Par didi dans le forum Développement OS X
    Réponses: 18
    Dernier message: 29/09/2007, 22h07
  4. [debutant] correspondance JAVA C++ pour pointeur de fonction
    Par davidoff_tls dans le forum Langage
    Réponses: 7
    Dernier message: 15/04/2004, 09h13

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