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

 Java Discussion :

Organisation application Swing


Sujet :

Java

  1. #1
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 26
    Par défaut Organisation application Swing
    Bonjour,

    Je suis actuellement en train de développer une application pour gérer des contacts en Swing. Cette application s'apparent à un CRUD (Create Read Update Delete). Elle possède une frame principal qui contient un JDesktopPane. Les autres écrans dérivent de JInternalFrame. Je développe sous Eclipse avec le Gui Builder "WindowBuilder Pro".

    Je suis confronté à un problème au niveau du découpage. J'aimerai séparer la partie métier de la partie présentation, mais j'ai un fort couplage de la partie métier dans la partie présentation. J'ai lu beaucoup d'articles sur ce sujet (MVC, design pattern) sans avoir pu trouver une solution.

    Connaissez-vous des astuces, des conseils à m'apporter pour avoir une application bien structuré plutôt qu'un "plat de spaghettis..."

    Merci par avance

  2. #2
    Membre chevronné Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Par défaut
    Moi je procède de la sorte pour découper mes applications. Cependant c'est une méthologie personnelle, à voir si cela te conviendra.

    Je créé un package métier qui va mettre à jour les données persistantes.

    fr.monApp.model.versionXXX.ContactManager
    -- load
    -- create
    -- update
    -- delete

    Je créé un package service qui va appeler le package métier. Ce service peut être un simple controller ou bien du RMI, du REST, enfin ce qu'on veut...

    fr.monApp.service.controller.versionXXX.ContactService
    -- load
    -- create
    -- update
    -- delete

    fr.monApp.service.rest.versionXXX.ContactService
    -- load
    -- create
    -- update
    -- delete


    Je créé le package qui va contenir mon application, le gui, les écran, cela peut du swing, une appli web, une applet...

    fr.monApp.swing.versionXXX.mainFrame
    fr.monApp.swing.versionXXX.LoadPopup
    fr.monApp.swing.versionXXX.ContactViewFrame

    C'est perfectible, je gère facilement les versions, les composants sont rééutilisables, en tout cas je m'en sors assez bien de la sorte, en espérant que cela puisse t'aider.

  3. #3
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 26
    Par défaut
    C'est une bonne approche. Le découpage est bien pensé. Mais comment gères tu les dépendances entre la vue et le contrôleur ? C'est la vue qui possède une instance du contrôleur ou l'inverse ?

    Je pense que tu as un fort couplage entre les différents packages de ton application.

    Merci

  4. #4
    Membre chevronné Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Par défaut
    C'est la vue qui décide quel service utiliser et le service appelle le modèle. Le service permet simplement de véhiculer l'information de différentes manières.

    En gros

    fr.monApp.swing.v10.mainFrame.initialize va initialiser le service fr.monApp.service.controller.v10.ContactService

    fr.monApp.swing.v10.mainFrame.load va appeler la méthode load du service fr.monApp.service.controller.v10.ContactService

    Et le service se contente juste d'appeler la couche persistante!

    A noter que la version n'est pas toujours v10, l'IHM évolue plus souvent que la couche service et la couche persistante.

    Par contre je ne vois pas comment peux-tu réduire au maximum les dépendances... Si tu as un code réeutilisable, tu réduis forcément le couplage entre les différents modules de ton application... Enfin si quelqu'un peut confirmer!

    Bon courage!

  5. #5
    Membre très actif
    Avatar de william44290
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juin 2009
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 400
    Par défaut
    j'ai bossé un peu le sujet :

    http://www.developpez.net/forums/d77...s/#post4465035

    j'ai fais quelque schéma et une présentation. Cela pourrait peut-être t'inspirer.

  6. #6
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 26
    Par défaut
    Merci pour ta réponse. Je pense que je vais m'inspirer de ton découpage.

    Concernant mon problème de couplage, je vais m'inspirer du pattern MVC ou composite.

    Je m'inspire aussi des framework J2EE Web (Struts, JSF,...)

    J'ai un écran qui affiche une liste de contact et à partir de celui-ci je peux consulter ou modifier un contact. Le problème c'est que l'appel à l'écran consulter ou modifier est présent dans l'écran de la liste des contacts. J'aimerais éviter cette approche.

    Merci

  7. #7
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 26
    Par défaut
    Super travail william44290

    Je vais lire la documentation de ton framework.

    Merci

  8. #8
    Membre très actif
    Avatar de william44290
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juin 2009
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 400
    Par défaut
    J'ai fait une demande d'hébergement sur le site. Une publication des sources pourrait intervenir prochainement.

    Si tu as des questions n'hésite pas.

  9. #9
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 26
    Par défaut
    Merci. Je serai ravi de pouvoir les consulter

    Tu utilises un framework particulier dans ton framework (je pense à spring) ou utilises tu plutot des design pattern (MVC, Observer) ?

  10. #10
    Membre très actif
    Avatar de william44290
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juin 2009
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 400
    Par défaut
    j'ai un peu honte mais je n'utilise pas de framework et pour les design patern je me suis documenté mais sans forcément en implémenter de manière canonique.

    J'ai essayé de fabriquer un outils fonctionnel avec le moins d'apriori possible.

  11. #11
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 26
    Par défaut
    J'ai viens de tester une approche qui à l'air de fonctionner. C'est pas la meilleur mais elle a l'avantage d'éviter un couplage entre les différents éléments

    Je crée une interface qui sera le pivot entre le communiquant et le communiqué
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public interface TraitementListener {
    	public void onSuccess(Object result);
    	public void onFailure(Exception e);
    }
    Ensuite je crée une méthode réalisant un traitement (ex requète BDD, ...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public void doSmth(TraitementListener l){
       try{
          //Si le traitement c'est bien déroulé, je renvois quelque chose
          l.onSuccess(object);//object : boolean, string, list, ...
       }		
       catch(Exception e){
          //Si le traitement a échoué, je renvois le message d'erreur
          l.onFailure(e);			
       }
    }
    Enfin, je met en place la structure dans la partie qui attends un traitement
    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
     
    ...
    TraitementListener listener = new TraitementListener() {
         @Override
         public void onSuccess(Object result) {
              Object object = result;
              //Do smthg
         }
     
         @Override
         public void onFailure(Exception e) {
              //Do smthg						
         }
    };
    ...
    Voila cette solution résout en partie mon problème de couplage. Je me suis inspiré des traitements asynchrones de GWT.

    Bonne soirée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Application Swing.. quelques questions d'organisation
    Par Invité dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 07/06/2006, 15h25
  2. Réponses: 10
    Dernier message: 16/03/2006, 11h31
  3. [Stratégie] Mise à jour application SWING
    Par chr_one dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 26/08/2005, 15h31
  4. [Info][Ecran Tactile]Application Swing
    Par Rampa dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 12/07/2005, 10h09
  5. [JDBC][ARCHITECTURE] application swing
    Par benssj5 dans le forum JDBC
    Réponses: 6
    Dernier message: 31/08/2004, 19h25

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