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 :

structuration des classes


Sujet :

Java

Vue hybride

blocnote structuration des classes 28/07/2010, 02h25
lnotray Salut, - Autant que... 28/07/2010, 09h18
legentil Salut ! En ce qui concerne... 28/07/2010, 09h29
legentil lnotray je viens de voir ton... 28/07/2010, 09h35
lnotray Peut-être est-ce suffisant... 28/07/2010, 10h00
legentil euh sauf erreur de ma part... 28/07/2010, 10h28
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Inscrit en
    Février 2010
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 1
    Par défaut structuration des classes
    Salut, svp voila un simple code qui contient une interface graphique avec deux boutons dont un avec le code de connexion a la bd et il fonctionne chez moi.

    Bon mon problème est : est-ce que ce code est correcte théoriquement, cad il faut un seul ficher classe ou plus, l'ordre des classes et méthodes est juste en deux mots ce qui m'intéresse c'est les bonnes pratiques donnez moi des remarques et merci d'avance.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 19
    Par défaut
    Salut,
    - Autant que possible, on met chaque classe / interface / enum /annotation dans un fichier séparé portant le même nom, et on les fait commencer par une majuscule.
    - On essaye de donner des noms explicites aux classes et aux méthodes
    - Appeler une classe 'Interface' est un peu bizarre car Interface est un élément du langage.
    - Quand on utilise le réseau, on le libère à la fin du traitement en utilisant finally, dans ton exemple ça donnerait cela :

    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
     
    		Connection connexion = null;
    		Statement instruction = null;
    		ResultSet resultat = null;
    		try {
    			connexion = DriverManager.getConnection(
    					"jdbc:mysql://localhost:3306/test", "root", "estest");
    			try {
    				instruction = connexion.createStatement();
    				try {
    					resultat = instruction
    							.executeQuery("SELECT col1 FROM table1");
    					try {
    						while (resultat.next()) {
    							System.out.println("Resultat: "
    									+ resultat.getString("col1"));
    						}
    					} catch (SQLException e) {
    						throw e;
    					} finally {
    						resultat.close();
    					}
    				} catch (SQLException e) {
    					throw e;
    				} finally {
    					instruction.close();
    				}
    			} catch (SQLException e) {
    				throw e;
    			} finally {
    				connexion.close();
    			}
    		} catch (SQLException e) {
    			System.out.println("echec pilote : " + e);
    		}
    Il n'y a pas de garbage collection pour les sockets laissés ouverts.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 187
    Par défaut
    Salut !

    En ce qui concerne les classes EcouteBoutonEnvoi1 et EcouteBoutonEnvoi2, ça me choque pas que ce soit dans la même classe.
    Moi en fait plutôt que de redéfinir une classe listener comme ça, je fais directement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    JButton1.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent ev)
    		{ 
    			System.out.println("Connexion...");
    			clique1 clq = new clique1();
    			clq.meth1();
     
    		}
    });
    Ce qui revient au même, au final je sais pas si il y en a un qui est à préférer à l'autre...

    par contre pour ta classe clique1 (qui devrai commencer par un majuscule d'ailleur !), ça serai plus propre de faire un fichier à part avec une classe genre AccesBDD un truc comme ça
    Cette classe serai paramétrable (pour l'adresse, login, password), la méthode meth1 s'appellerai connexion (et d'autres méthodes permettraient de faire diverses actions sur la base, comme lancer du SQL par exemple, fermer la connexion).
    Comme ça tu te retrouverai avec une classe entièrement réutilisable !

    Ensuite ta classe Connexion ne sert pas à grand chose, tu pourrai mettre le

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public static void main(String[] args)
    	{	Interface1 inter1 = new Interface1();
    		inter1.methode1();
    	}
    directement dans la classe Interface

    Dernier détail, si ta classe principale de ton fichier s'appelle Interface1, ton fichier doit s'appeler Interface1.java

    Voilà en espérant que ça t'aidera !

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 187
    Par défaut
    lnotray je viens de voir ton message, il y a pas d'intérêt à catcher 3 fois la même exception pour faire le même traitement derrière, ton code est simplifiable :

    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
     
    Connection connexion = null;
    		Statement instruction = null;
    		ResultSet resultat = null;
    		try {
    			connexion = DriverManager.getConnection(
    					"jdbc:mysql://localhost:3306/test", "root", "estest");
    			try {
    				instruction = connexion.createStatement();
    				resultat = instruction.executeQuery("SELECT col1 FROM table1");
    				while (resultat.next()) {
    					System.out.println("Resultat: "
    									+ resultat.getString("col1"));
    				}
    			} catch (SQLException e) {
    				throw e;
    			} finally {
    				resultat.close();
    			}
    		} catch (SQLException e) {
    			System.out.println("echec pilote : " + e);
    		}
    ça aura le même comportement si je me trompe pas?
    Sinon par contre tout à fait d'accord sur le reste !

  5. #5
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 19
    Par défaut
    Peut-être est-ce suffisant dans la plupart des cas et que mon code est un peu ceinture - bretelles, mais en toute rigueur avec ta méthode :
    - si connexion.createStatement() lève une exception tu vas te retrouver avec un NPE sur resultat.close()
    - à aucun moment tu ne fermes ta connection.
    Après, je suis bien incapable de te dire ce que cela va impliquer, je ne sais même pas ce qu'il advient des connections qu'on laisse ouvertes, mais à mon avis ce n'est pas optimal.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 187
    Par défaut
    euh sauf erreur de ma part (j'ai copié collé ton code et peut être supprimé un peu vite) mon code et le tiens ont le même effet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    connexion = DriverManager.getConnection(				"jdbc:mysql://localhost:3306/test", "root", "estest");
    Va être catché par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    } catch (SQLException e) {
    			System.out.println("echec pilote : " + e);
    		}
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    instruction = connexion.createStatement();
    resultat = instruction.executeQuery("SELECT col1 FROM table1");
    				while (resultat.next()) {
    					System.out.println("Resultat: "
    									+ resultat.getString("col1"));
    				}
    Toutes les instructions du code ci dessus seront catchés par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    } catch (SQLException e) {
    				throw e;
    			} finally {
    				resultat.close();
    			}
    (et donc le close est fait dans ton exemple comme dans le mien)
    Par contre, dans ton exemple, le close sera fait 3 fois alors que dans le miens il est fait qu'une fois!

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 342
    Par défaut
    je ne suis pas sur de moi mais la j'ai un doute

    j'aurais dit plutot


Discussions similaires

  1. Schéma structure des classes
    Par delma dans le forum EDI et Outils pour Java
    Réponses: 8
    Dernier message: 29/11/2006, 16h52
  2. Créer les get et set des classes
    Par cameleon2002 dans le forum JBuilder
    Réponses: 3
    Dernier message: 17/09/2003, 21h03
  3. specifier les chemins des .class
    Par draken dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 29/07/2003, 09h35
  4. Inserer des classes java existantes
    Par 2000 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 20/03/2003, 12h35
  5. Structure des données en retour d'un DBExtract ?
    Par mikouts dans le forum XMLRAD
    Réponses: 4
    Dernier message: 24/01/2003, 15h15

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