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 :

Le modèle MVC *un peu paumée*


Sujet :

Java

  1. #1
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2007
    Messages : 50
    Points : 45
    Points
    45
    Par défaut Le modèle MVC *un peu paumée*
    Bonsoir à tous !

    Me revoilà avec quelques questions.
    J'ai lu le tuto sur le modèle MVC mais j'ai vraiment du mal à comprendre la façon de s'y prendre par rapport à ma méthode habituelle...

    J''ai commencé mon projet de fin d'études donc je suis partie du principe de faire un API propre et claire. Habituellement je procède de la façon suivante :
    - Un package avec le code qui effectue tous les calculs.
    - Un package avec les classes graphiques
    - Et les listeners sur les composants des classes graphiques exécutant le code brut.

    Maintenant, prenons mon exemple :

    J'ai un formulaire (dans un JPanel) laissant à l'utilisateur le choix d'options. Ce-dernier est sur une JInternalFrame qui possède l'option : "lancer le forumulaire".
    Lors du clic sur cette option, le FormulaireListener de ce menu récupère toutes les valeurs des options du JPanel grâce aux geteurs de ce-dernier. Ces options sont entrées dans une HashMap qui est ensuite donnée en argument de la création du FormulaireManager (code brut qui traite le formulaire).


    Avec cet exemple, pourriez-vous me donner en deux lignes, les classes que je dois créer pour suivre le pattern MVC ? Parce que je n'en ai strictement aucune idée

    Merci de votre aide et bonne soirée !

  2. #2
    Membre actif Avatar de Torg666
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 230
    Points : 254
    Points
    254
    Par défaut
    On va faire sur un exemple plus simple, par exemple une fenetre te pemettant de saisi une voiture. Dans MVC, M= modele, V = vue et C = controleur.

    Dans ce cas:
    - le modele peut être un objet voiture.
    - la vue sera à proprement parler ta fenêtre.
    - le controleur est une classe qui va effectuer les traitements(sauvegarde, verification diverses, etc...)

    Exemple d'utilisation:

    Un utilisateur veut saisir une voiture:
    - il faut instancié ta vue, ton controleur et ton modele (pour le modele ca peu se discuter).
    - ton utilisateur à la fenetre sous le nez et saisi les divers champs.
    - ton utilisateur enregistre.
    - la vue demande au controleur d'effectuer le traitement et attend la reponse du controleur.
    - le controleur effectue des vérifications (notement au niveau de la saisie) et édite le modele avec les nouvelles donnees ou pas.
    - le controleur renvoi la réponse a la vue, comme quoi il a fait ou pas le traitement.

    Pour les listeners, en géneral, je les mets dans la vue car il font appel à des fonctions du controleur. Exemple dans le cas d'un bouton enregistrer, le listener ClickListener appelera la fonction enregistrer du controleur via l'evenement onCLick.

    Je suis pas certain d avoir ete finalment si clair...
    La javaDoc est mon amie, elle est la tienne aussi!

  3. #3
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 311
    Points : 9 524
    Points
    9 524
    Billets dans le blog
    1
    Par défaut
    A mon tour

    Pour le modèle MVC, le M correspondrait aux données utilisées par l'ihm, c'est généralement une classe qui contient à la fois les données de l'ihm + les méthodes d'acquisition ou d'évolution du modèle

    Le V correspond à l'ihm, les classes de swing pour créer tes interfaces graphiques

    Le C serait des classes spécifiques qui font le lien entre les 2 autres, plutôt associées aux listeners.

    Bref, lorsque tu cliques sur un bouton, tu passes la main au contrôleur qui va utiliser une ou plusieurs méthodes du modèle pour construire une vue.
    Je dois reconnaître que le mot "Modèle" est un peu ambiguë, c'est plutôt une notion de DAO (Data Access Object)... mais on ne va pas tout compliquer là...

    Voilà, tu as 2 explications, peut-être y trouveras-tu ton bonheur...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2007
    Messages : 50
    Points : 45
    Points
    45
    Par défaut
    Hmmmm....

    Bon dans mon cas, la "vue" serait mon JPanel sur mon JFrame.
    Les geteurs du JPanel je les laisse où ils sont ? Ou bien il s'agit là d'un boulot du modèle justement ?

    Le formulaireManager serait le contrôleur ? C'est lui qui traite les informations du formulaire données en argument (il envoie une requête sur internet en utilisant des classes d'une librairie connue).

    Ici le listener sur le bouton, instanciant le formulaireManager resterait donc dans la vue ?

  5. #5
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 311
    Points : 9 524
    Points
    9 524
    Billets dans le blog
    1
    Par défaut
    Difficile de répondre sans voir le code...

    Pour la vue, je pense qu'on est d'accord, les getter/setter liés à aux objets JTextField ou autres sont positionnés là.

    Le modèle correspond aux données utilisées par la vue (avec les méthodes de recherche, ajout, etc...)

    Le contrôleur ne doit faire que le lien, il va utiliser les getter de la vue pour l'acquisition des valeurs des paramètres à passer à la méthode du modèle.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2007
    Messages : 50
    Points : 45
    Points
    45
    Par défaut
    Ok, je vois mieux le truc ^^

    Ce qu'il me manque c'est le contrôleur. Ce que tu mets dans le contrôleur c'est ce que je mets habituellement dans mon listener...

    Grandes questions : le listener est-il dans le contrôleur ?? Où est-ce qu'il va ?
    C'est lui qui instance le contrôleur ?

    Mon panel :
    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
     
    public class SearchPanel extends JPanel {
     
    private JLabel m_titleLabel = new JLabel();
    private JLabel m_seqLabel = new JLabel();
    private JTextArea m_seqArea = new JTextArea(5, 5);
     
    public SearchPanel() {
    init();
    }
     
    public String getSeq() {
     return m_seqArea.getText();
    }
    ......
     
    public void init() {
     
     
            FormLayout formlayout1 = new FormLayout("FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:400PX:NONE,FILL:DEFAULT:NON");
     
            CellConstraints cc = new CellConstraints();
            this.setLayout(formlayout1);
     
            m_titleLabel.setFont(new Font("Times New Roman", Font.BOLD, 20));
     
            m_titleLabel.setText("BLAST");
            m_titleLabel.setHorizontalAlignment(JLabel.CENTER);
            this.add(m_titleLabel, cc.xy(6, 1));
     
     
            m_seqLabel.setText("Entrez la séquence de votre protéine :");
     
            this.add(m_seqLabel, cc.xy(6, 3));
     
            m_seqArea.setToolTipText("Numéro d'accession, gi ou séquence au format fasta");
            JScrollPane jscrollpane1 = new JScrollPane(m_seqArea, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
            jscrollpane1.setViewportView(m_seqArea);       
            this.add(jscrollpane1, cc.xy(6, 4));
    ....
    }
    }
    InternalFrame :
    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
    49
    50
     
    public class Frame extends JInternalFrame {
     
        private SearchPanel searchPanel;
        private ChargingPanel chargePanel;
        private Manager formulaireManager;
     
     
        public Frame() {
            super("Formulaire", true, true, true, true);
     
            this.setBackground(Color.white);
            this.setPreferredSize(new Dimension(MainFrame.screenSize.width / 2 - 20, MainFrame.screenSize.height - 60));       
     
            chargePanel = new ChargingPanel("En attente", new ImageIcon(getClass().getResource("../ressources/white_ncbi.jpg")));
     
            JMenuBar menuBar = new JMenuBar();
            JMenu blast = new JMenu("Test");
            menuBar.add(blast);
     
            JMenuItem blastLauncher = new JMenuItem("Lancer");
            blast.add(blastLauncher);
     
            this.setJMenuBar(menuBar);
            searchPanel = new SearchPanel();
     
            this.add(searchPanel);
            blastLauncher.addActionListener(new ActionListener() {
     
                HashMap<String, String> options = new HashMap<String, String>();
     
                public void actionPerformed(ActionEvent e) {
     
                    options.put("sequence",searchPanel.getSequence());
                    ....
                    try {
                        manager = new formulaireManager();
                        manager.search(options);
                      Logger.getLogger(Frame.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (BioException ex) {
                        Logger.getLogger(Frame.class.getName()).log(Level.SEVERE, null, ex);
                    }
     
                }
            });
     
            this.pack();
            this.setVisible(true);
        }
    }
    Manager :
    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
     
     
    public class Manager {
     
        BufferedReader result;
     
     
        public void searchQBlast(HashMap<String, String> options) throws BioException, IOException {
            BufferedReader buff = new BufferedReader(new StringReader(options.get("sequence")));
            SimpleNamespace ns = new SimpleNamespace("bj_blast");
            RichSequenceIterator rs = RichSequence.IOTools.readFastaProtein(buff, ns);
     
     
          ...
            rqb.setBlastDatabase(options.get("database"));        
            rqb.setBlastOrganisms(options.get("organisms"));
           ...
     
     
    ....
                is = rbw.getAlignmentResults(request, rof);
     
                result = new BufferedReader(new InputStreamReader(is));
     
     
            }
     
        }

  7. #7
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 311
    Points : 9 524
    Points
    9 524
    Billets dans le blog
    1
    Par défaut
    Au niveau de swing, le contrôleur serait du genre générique avec un test de la source pour "rooter" vers le modèle qui va bien (en l'occurrence, ce que fait ton ...manager) un truc dans le genre
    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
     
    public class ApplicationControler implements ActionListener
    {
        @Override
        public void actionPerformed(ActionEvent arg0)
        {
            if (arg0.getActionCommand() == "Ajouter")
            {
                jModel.addElement(new Timestamp(new Date().getTime()));
            }
            if (arg0.getActionCommand() == "Retirer")
            {
                jModel.remove(jList.getSelectedIndex());
            }
        }    
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre du Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Février 2007
    Messages : 50
    Points : 45
    Points
    45
    Par défaut
    Bon finalement ça ressemble fortement à ce que je fais, je vais juste séparer mon listener de la vue

    Merci du temps que vous m'avez consacré

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

Discussions similaires

  1. jsf et le modèle MVC
    Par mjihanne dans le forum JSF
    Réponses: 11
    Dernier message: 21/03/2008, 13h01
  2. Interface SWT selon le modèle MVC
    Par LoloBebop dans le forum SWT/JFace
    Réponses: 6
    Dernier message: 05/07/2006, 16h27
  3. [Architecture] Comment s'approcher du modèle mvc ?
    Par nikalkal dans le forum EDI/Outils
    Réponses: 4
    Dernier message: 21/06/2006, 17h46
  4. Architecture J2EE et modèle MVC
    Par alexd dans le forum Développement Web en Java
    Réponses: 4
    Dernier message: 23/02/2005, 15h59
  5. Un peu paumé, votre avis !
    Par hmpnet dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 16/01/2005, 16h57

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