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

avec Java Discussion :

Organisation du code


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 64
    Par défaut Organisation du code
    Bonjour à tous,

    Je reviens vers vous car j'ai des problème dans l'organisation de mon code.
    Je souhaite développer une application java + MySQL avec le pattern MVC.

    J'ai découpé mon code en 3 parties :
    Pour commencer, j'ai créé la "Frame" avec une barre de menu.
    Ensuite au nord de la Frame, j'ai construit une barre d'outil me permettant de faire une recherche avec un ou plusieurs critères.
    Enfin au centre de la Frame, j'ai mis en place différents "Panel" qui doivent s'initialiser en fonction des critères de recherche.

    Chaque élément possède son propre controller :
    - un controller principal pour la Frame
    - un controller pour le panel de recherche
    - un controller pour chaque panel au centre de la fenêtre.

    L'objectif étant que sur changement d'un critère de recherche, le panel situé au centre de la fenêtre s'actualise automatiquement.
    Le problème ici est que le controller de la Frame ne connais pas le panel affiché au centre de la fenêtre.
    Des pistes, des solutions?

  2. #2
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 341
    Par défaut
    Bonjour,

    vous pouvez passer des reférences des autres classes aux différents constructeurs.

    Je ne sais pas si cela va vous être utilise, mais regardez du côté de ce post:http://www.developpez.net/forums/d98...s-classe-mere/
    A l'aide de ce système, j'ai réussi à donner à tous les composants des références sur des classes qui les intéressent.

    @ bientôt...

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 64
    Par défaut
    Merci pour ce tuyau, je ne connaissais pas cette écriture.

    Mais dans mon cas, le controller de la Frame construit le controller du panel de recherche ainsi que le ou les controller panel central (panelCentral1, panelCentral2, ...) avec this en paramètre correspondant au controller de la frame.

    Lorsque l'utilisateur va modifier un critère de recherche, comment le controller de la frame peut-il informer le panel central en cours d'exécution?

    C'est un peu confus pour moi, le panel central connais la classe mère car il a sa référence en paramètre, mais la classe mère ne connais pas forcément le panel central en cours.

  4. #4
    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
    met ton code, on pourra surement mieux t'aider.

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 64
    Par défaut
    Mon code est assez long mais je vais essayer de le simplifier.
    voici le code du controller de la fenêtre :
    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
    public class Controller { 
    	private Connex connexion;
    	private Model model;
    	private View view;
     
     
    	// CONTROLLER
    	public Controller() {
    		try {
    			this.connexion = new Connex(); 
    		} 
    		catch (SQLException e) {}
    		catch (Exception e) {}
     
    		this.model = new Model();
    		this.view = new View(this);
     
    		this.view.setPanelRecherche(new ControlRecherche (this));
    	}
     
     
    	// GETTER AND SETTER
    	public Connex getConnexion() {
    		return connexion;
    	}
     
    	public Model getModel() {
    		return model;
    	}
     
     
    	// EVENEMENT
    	public void displayPanelCentral1 () {
    		ControllerCentral1 controlCentral1 = new ControllerCentral1 (this);
    		view.setPanelCentral(controlCentral1.getView());
    	}
     
            public void displayPanelCentral2 () {
    		ControllerCentral2 controlCentral2 = new ControllerCentral2 (this);
    		view.setPanelCentral(controlCentral2.getView());
    	}
     
            ...
    }
    Voici le code de mon controller frontal qui contruit la classe View qui étend de JFrame.
    Ensuite les autres controller contruisent des vues qui étendent de JPanel.

  6. #6
    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
    bon, c'est un peu synthétique et on ne dispose pas du détail. Mais dans l'esprit de ce que tu as fait : puisque view et en charge de setter les panels, view pourrais aussi getter les références aux panels et par là propager des notifications particulières.

    En java il existe de multiple façon de procéder pour obtenir un résultat. IL est surtout question de choix d'implémentation ce référent à une école de pensée, un choix d'outils ou plus communément d'utilisation de Design pattern.

    Désolé, en l'état difficile de te dire : tu doit faire comme ceci ou comme cela.

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2009
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 64
    Par défaut
    Merci pour votre réponse.
    Effectivement, je me suis orienté sur le pattern observer qui me permettra d'observer le changement sur les critères de recherche.
    Voici le modèle de mon controller principal
    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
    public class Model {
    	private int idService;
    	private EventListenerList listeners;
     
     
    	// CONTRUCTEUR
    	public Model(){
    		this(0);
    	}
     
    	public Model(int idService){
    		super();
     
    		this.idService = idService;
     
    		listeners = new EventListenerList();
    	}
     
     
    	// GETTER AND SETTER
    	public int getIdService() {
    		return idService;
    	}
     
    	public void setIdService(int idService) {
    		this.idService = idService;
     
    		fireServiceChanged();
    	}
     
     
    	// OBSERVER
    	public void addServiceListener(ServiceListener listener){
    		listeners.add(ServiceListener.class, listener);
    	}
     
    	public void removeServiceListener(ServiceListener l){
    		 listeners.remove(ServiceListener.class, l);
    	}
     
    	public void fireServiceChanged(){
    		ServiceListener[] listenerList = (ServiceListener[])listeners.getListeners(ServiceListener.class);
     
    		for(ServiceListener listener : listenerList){
    			listener.serviceChanged(new ServiceChangedEvent(this, getIdService()));
    		}
    	}
    }
    Voici comment je l'ai utilisé dans mon controller principal.
    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 void displayPanelCentral1 () {
    	     ControllerCentral1 controlCentral1 = new ControllerCentral1 (this);
                 model.addServiceListener(controlCentral1.getView());
    	     view.setPanelCentral(controlCentral1.getView());
    	}
     
            public void displayPanelCentral2 () {
    	     ControllerCentral2 controlCentral2 = new ControllerCentral2 (this);
                 model.addServiceListener(controlCentral2.getView());
    	     view.setPanelCentral(controlCentral2.getView());
    	}
     
            ....

    Je réussi ainsi à intercepter les évènements sur le panel de recherche.

    Mais, car toujours un mais, lorsque j'ouvre par exemple le panelCentral1 puis le panelCentral2, et que je modifie le critère de recherche, le panelCentral1 et le panelCentral2 sont actualisé alors que je souhaiterai raffraichir uniquement le panelCentral en cours d'affichage

Discussions similaires

  1. Persistance et organisation du code
    Par K-Kaï dans le forum Hibernate
    Réponses: 16
    Dernier message: 06/06/2007, 17h01
  2. Organisation du code source
    Par _kal_ dans le forum C
    Réponses: 18
    Dernier message: 04/08/2006, 14h15
  3. organisation du code.
    Par poporiding dans le forum C++
    Réponses: 36
    Dernier message: 13/07/2006, 10h15
  4. organisation du code.
    Par poporiding dans le forum C++
    Réponses: 3
    Dernier message: 28/06/2006, 17h10
  5. Réponses: 4
    Dernier message: 19/09/2005, 17h56

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