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

JDBC Java Discussion :

Comment séparer les différentes couches d'accès au données au niveau du code?


Sujet :

JDBC Java

  1. #1
    Membre régulier Avatar de abir84
    Inscrit en
    Mars 2007
    Messages
    214
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2007
    Messages : 214
    Points : 116
    Points
    116
    Par défaut Comment séparer les différentes couches d'accès au données au niveau du code?
    Bonjour à tous

    Voila je ne sais pas si je suis dans la bonne rubrique. Je voudrai savoir comment séparer le code (interface utilisateur) des différentes autres couches (accès aux données...).

    En fait, j'ai développé une application, j'ai fait une classe qui s'occupe de l'accès aux données et les autres pour l'interface utilisateurs qui appellent cette classe. MAis en la montrant aux experts on m'a dit qu'il faut une séparation réelle... et on m'a aussi parlé d'injection sql.

    Franchement j'ai pas bien compris ce qu'il faut faire et comment mettre en pratique la séparation des couches (métier, accès aux données, ui...)

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Je pense que ce que tes experts ont voulu dire, c'est que la séparation IHM/Accès aux données n'est pas suffisante.

    En général, on ajoute une couche intermédiaire entre les deux. Ainsi, on se retrouve avec 3 types de classes:

    - les classes de l'IHM
    - les classes d'accès aux données
    - les classes intermédiaires, appelées "contrôleurs", qui font le lien entre données et IHM

    Si ton application effectues des traitements compliqués (partie "métier"), tu peux séparer celle-ci dans une couche supplémentaire

  3. #3
    Membre régulier Avatar de abir84
    Inscrit en
    Mars 2007
    Messages
    214
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2007
    Messages : 214
    Points : 116
    Points
    116
    Par défaut
    Bonjour,

    Si j'ai bien compris c'est que je dois séparer ces parties en des classes séparées. Par exemple une classe pour l'intrface qui fait appelle à une autre classe s'occupant de l'accès aux bases de données?? Mais c'est ce que j'ai fait!!

    Mais je crois il y a des solutions plus professionnelles (genre bibliothèque de classes pour la partie accès aux données??)

    En plus cette solution ne résoud pas le problème d'injection sql.

    Excusez moi je suis débutante et j'ai encore beaucoup de progrès à faire

    Merci

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    949
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 949
    Points : 1 856
    Points
    1 856
    Par défaut
    Injection SQL : http://fr.wikipedia.org/wiki/Injection_SQL

    Concernant la séparation des couches.
    Votre classe d'interface appelle directement votre classe d'accès aux données, n'est-ce pas? C'est une pratique à éviter.
    Le mieux est de définir une interface définissant toutes les méthodes d'accès aux données. (Interface au sens Java du terme, c'est à dire une pseudo classe vide déclarée par le mot clé "interface" plutôt que classe, je ne parle pas ici de l'IHM.) Ensuite, vous créez une implémentation séparée de cette interface. (En Java, une classe héritant de cette interface.)
    Les classes appellantes ne connaissent pas la classe d'implémentation, elles ne connaissent que l'interface. Ainsi, il est possible de changer d'implémentation sans changer les classes clientes. Typiquement, un service tiers est chargé de retrouver l'implémentation quand une classe appellante demande une interface.

    Comme l'a dit CyberChouan, vous pouvez également séparer la couche métier. Typiquement, la couche métier ne fait qu'appeller la couche donnée, mais contient toute la logique applicative quand il y en a.

    Pour aller plus loin, vous pouvez vous renseigner sur "MVC". Le framework Spring peut vous être utile, mais c'est un gros morceau à avaler pour un débutant.

  5. #5
    Membre régulier Avatar de abir84
    Inscrit en
    Mars 2007
    Messages
    214
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2007
    Messages : 214
    Points : 116
    Points
    116
    Par défaut Un bon document sur le développement en couche
    Bonjour,

    Voila j'ai trouvé sur developpez.com un bon document parlant du développement en couche. Les exemples sont en .NET et il est bien pour les débutants (comme moi) :
    ftp://ftp-developpez.com/morpheus/ar...chitecture.pdf

    Maintenant j'ai une question, une fois on a le sujet de l'application à développer par ou on doit commencer? (cahier de charge, choix de plateforme, ...)

  6. #6
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Là ce qu'il te faut, c'est un cours de Management de projet informatique...

    Dans l'ordre, on commence par rédiger le cahier des charges
    Le choix de l'architecture dépend de celui-ci, et d'un certain nombre de points que le cahier des charges est supposé préciser:
    - le projet doit-il durer dans le temps et être maintenu sur le long terme?
    - comment est-il dimentionné? en terme de complexité, de charge, de nombre d'utilisateurs à l'utiliser simultanément...
    - doit-il être tolérant à la panne? (système critique devant pouvoir fonctionner en mode dégradé...)
    - etc...

    En fonction de ces points (et de beaucoup d'autres), on choisit l'architecture la mieux adaptée. Par exemple, pour un petit projet, il n'est pas forcément nécessaire d'utiliser Spring + Struts + hibernate + Maven + etc...
    Par contre, ces Frameworks deveindront nécessaires pour des projets de plus grande envergure

    Maintenant, tu n'as à te poser ces questions que si tu fais partie de l'équipe de conception. Et le choix final revient toujours au chef de projet. Si tu n'es que membre de l'équipe projet, tu peux proposer des solutions et dire ce que tu envisages mais tu n'as qu'un avis consultatif.

    Du moins, c'est comme ça que les choses devraient se passer...

  7. #7
    Membre régulier Avatar de abir84
    Inscrit en
    Mars 2007
    Messages
    214
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2007
    Messages : 214
    Points : 116
    Points
    116
    Par défaut
    Merci pour les conseils, les choses sont plus claires mnt

    Citation Envoyé par CyberChouan

    Maintenant, tu n'as à te poser ces questions que si tu fais partie de l'équipe de conception. Et le choix final revient toujours au chef de projet. Si tu n'es que membre de l'équipe projet, tu peux proposer des solutions et dire ce que tu envisages mais tu n'as qu'un avis consultatif.
    Il faut dire que je suis tte l'équipe (concepteur, developpeur...) , en effet j'ai developpé une appli qui a été très mal faite (sans conception et avec plein de beug...). Donc je veux tout refaire dans les règles de l'art ... pour oublier la honte et les critiques du 1er essai

    Mais j'ai une chose très floue dans ma tête : la relation entre les classes et la base de données. Est ce qu'il y a un SGBD permettant de stocker une base de données objet et non pas relationnelle. C'est plus facile a mon avis...

    Merci

  8. #8
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Le Framework Hibernate a été développé spécialement pour ça.

    Il te permet de faire le mapping entre tes objets java et une base de données relationnelle de manière transparente. Il te "suffit" d'écrire le fichier de mapping et de spécifier les paramètres d'accès à la base de données.

    Ensuite, tu invoques les méthodes de persistance => hibernate stocke ton objet dans la base de données, le met à jour, et régénère ton objet java à partir des données du SGBD.

    De plus, hibernate a le bon goût de s'interfacer avec tous les SGBD usuels (Oracle, postgreSQL...)

  9. #9
    Membre chevronné Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 232
    Points : 1 897
    Points
    1 897
    Par défaut
    Un peu pour résumer ce post car cela n'est pas toujours évident : concentre-toi sur le modèle MVC (Modèle-Vue-Contrôleur) et Hibernate (Persistance des données).

    Bon travail car là il y a de quoi t'occuper.

  10. #10
    Membre régulier Avatar de abir84
    Inscrit en
    Mars 2007
    Messages
    214
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2007
    Messages : 214
    Points : 116
    Points
    116
    Par défaut Merci à tous
    Merci a vous tous pour ces conseils!! Maintenant je sais par ou commencer au moins

    Je vais commencer et bien sur vous allez beaucoup me voir avec mes "petites" questions


  11. #11
    Membre chevronné Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 232
    Points : 1 897
    Points
    1 897
    Par défaut
    Citation Envoyé par abir84
    Merci a vous tous pour ces conseils!! Maintenant je sais par ou commencer au moins

    Je vais commencer et bien sur vous allez beaucoup me voir avec mes "petites" questions

    Pas trop quand même.

Discussions similaires

  1. Réponses: 6
    Dernier message: 26/02/2010, 14h37
  2. [PEAR][HTML_QuickForm] Comment séparer les différents champs ?
    Par mohican13 dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 17/02/2006, 08h21
  3. [Volume sonore] Comment séparer les volumes
    Par Manopower dans le forum Windows
    Réponses: 1
    Dernier message: 05/09/2005, 11h50
  4. Réponses: 2
    Dernier message: 18/08/2005, 12h42
  5. Réponses: 3
    Dernier message: 24/05/2005, 12h35

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