Organisation d'une application java avec base de données

Résolu
profiter Messages postés 205 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 15 mars 2013 - 15 août 2011 à 14:17
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 - 16 août 2011 à 18:10
bonjour,

je refais mon application de gestion avec la base de données
et j'aimerai bien savoir de point de vue organisation : comment on fait pour decoupler la partie manipulation de la base de données de la vue utilisateur
=> pour faciliter la modification de l'un deux sans avoir a modifier l'autre
au cas de changement de sgbdr ou ...
aussi ?
est ce qu on cree une classe correspondant a chaque table de la base car je vois beaucoup de gens qui font ca
detaillez moi svp

merci d'avance

14 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
15 août 2011 à 14:28
Bonjour,

Ce que je fais en général c'est une classe DAO par type d'objet enregistré dans la base si par exemple j'ai un objet Utilisateur, je créé une classe UtilisateurDAO dont toutes les méthodes retournent des utilisateurs.

Dans cette classe, je créé une méthode reconstituerUtilisateur qui retourne l'utilisateur à partir d'une resultset. Cette méthode est utilisée par la plupart des méthodes de la classe et éventuellement dans d'autres classes.

Et ensuite, il est souvent intéressant de créer un package service qui fait appel aux classes DAO, les classes du package service sont utilisées dans les classes correspondant au controleurs.

Pour résumer : les classes DAO permettent de recréer un type d'objet. Ces classes ne sont appelées que dans les services qui sont appelés dans les classes qui correspondent aux controleurs.
2
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
16 août 2011 à 11:31
Voilà, c'est fait : http://www.javafr.com/codes/ORGANISER-APPLICATION-JAVA_53473.aspx

Si tu as des question, n'hésite pas à les poser mais reste correct...
2
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
15 août 2011 à 14:30
Il est également intéressant de créer une classes Connexion qui te permet d'accéder à la base de données et de la placer en paramètre de toutes les classes DAO de cette manière, tu pourras changer de connexion plus facilement.
0
Utilisateur anonyme
16 août 2011 à 00:52
Bonsoir

Julien39, il faudrait peut-être lui expliquer ce qu'est le modèle MVC 1 ou 2 comme tu parles de contrôleurs.

profiter, je te conseille de bien séparer le modèle, la vue et le contrôleur. Le modèle contient les données (ton SGBD relationnel, objet ou autre), la vue contient la représentation des données (l'interface graphique) et le contrôleur contient les opérations sur les données. En MVC 2, le modèle ne peut communiquer avec la vue que par le biais d'un contrôleur.

Je te conseille aussi de regarder du côté de l'architecture 3 tiers si les applications orientées client-serveur t'intéressent. Cordialement.













T.U.E.R (First Person Shooter créé par Julien Gouesse)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
16 août 2011 à 08:19
Oui, c'est vrai merci goussej, je supposais que cette architecture était connue ce qui n'est pas nécessairement le cas.

Je te conseil de faire des recherches sur internet au sujet du design pattern MVC qui te permet de structurer ton application de manière assez propre.
0
profiter Messages postés 205 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 15 mars 2013 8
16 août 2011 à 09:03
bonjour,

merci gouessej pour ta comprehension
"je souhaite que julien39 ne se fache pas "

je me suis documenté sur les design patterns ( aussi les exples et tuto de julien39 )

avant ca
je voulais dire a julien39 qui l' aurai du me dire de lire sur le patern DAO alors j'ai fait ca et j'ai compris le dao et c'est ce que je voulais sauf que dans les exples de l'inplementation de DAO j'ai remarque que les classes contient les methodes :
insert,update, delete, find(select)
mais dans le cas ou j'ai des requetes compliques de jointures entre les tables comment faire si je veux pas ajouter d'autres methodes dans les classes DAO

concernant le mvc j'aimerai connaitre quoi signfie :

public interface [u][u]IObserver<M extends IObservable>/u/u {

public void update(M observable);

}


et d'autres questions pour apres

merci bien
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
16 août 2011 à 09:41
Le code java que tu as donné est issu d'un code que j'ai posté sur ce site qui fournit un ensemble de classes dans le but d'implémenter le design pattern MVC. Ce package fonctionne et permet de répondre au problème. Seulement il est assez lourd à utiliser.

L'interface que tu as cité est une interface qui utilise un type générique : M. De cette manière, la méthode update peut prendre un attribut n'importe quel type. Regardes le tutoriel que j'ai fais sur les types génériques et tu comprendras (c'est un tutoriel assez court et simple à comprendre je pense).

Pour en revenir à ton problème, je dois dire que je ne vois pas trop ou tu en es. Et je ne connais pas vraiment ton niveau en programmation. Si tu es débutant, tu peux te contenter d'implémenter un pseudo pattern MVC (sans la partie notification de changement).

Ce que tu peux faire simplement c'est de créer trois packages un model un view et un controler.
[list]
Dans view : tu définis les écrans de ton application sans faire référence aux model et dans chaque classe tu créé une méthode update qui prend en paramètre des objets du model et qui initialise la valeur des champs et tu places un ou plusieurs controleurs.
Dans model : tu places tes classes métier et tu créé un package dao et un package services. Dans le package DAO tu créé une classe Connexion et tu créé les classes ObjetDAO qui te permettent de reconstituer les objets de ton appli.
Dans controler : tu créé les classes qui te permettent d'enchainer les écrans et de faire les traitements associés à chaque action de l'utilisateur.
/list
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
16 août 2011 à 09:42
Je vais essayer de te faire un exemple de décomposition de code que je posterai sur ce site, je te tiendrai au courant.
0
profiter Messages postés 205 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 15 mars 2013 8
16 août 2011 à 10:00
je te remercie beaucoup pour les explications ca un peu eclaircit les choses

et tu as oublié de repondre a la question :
dans les exples de l'inplementation de DAO j'ai remarque :

les classes dao contient les methodes insert update delete et find c bon
alors si j'ai besoin d'une requette sql compliqué ou il ya des jointures entre les tables et .....
comment faire sans toucher a ses classes
je pense qu il faut utiliser find pour afficher tous et puis avec des for et if selectionner ce qu'on veut
=> c'est pas evident

concernant l'exemple que tu va poster : j'aimerai bien qu il porte sur application de gestion (facture client, fournisseur produit ) avec la base de donnees

et le plus proche delai ( je sais que j'exagere )

grand grand merci
0
profiter Messages postés 205 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 15 mars 2013 8
16 août 2011 à 10:07
de plus
est ce que tu peux m'indiquer environ le temps pour poster cet exple
(je sais que j'exagere )
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
16 août 2011 à 10:41
je pense qu il faut utiliser find pour afficher tous et puis avec des for et if selectionner ce qu'on veut


C'est une très très mauvaise idée, tu vas perdre un temps fou et ton application sera vraiment vilaine dans ce cas. La solution est de ne pas se limiter à ces méthodes mais de défnir des méthodes personnalisées.

j'aimerai bien qu il porte sur application de gestion

Il ne faut pas éxagérer, ce sera un exemple très simple

et le plus proche delai ( je sais que j'exagere )

Oui tu exagères, en lisant cette phrase, j'étais à deux doigts de laisser tomber et de ne plus t'aider. Je ne suis pas ton employé et je te demande de me traiter avec plus de respect.


J'ai presque terminé l'exemple, je le posterai d'ici 20-30 minutes
0
profiter Messages postés 205 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 15 mars 2013 8
16 août 2011 à 13:18
grand merci, je sais pas avec quoi te remercier

je m'excuse beaucoup : c'est vrai j'ai exageré ( mais crois moi : je croyais pas que je vais de toucher )


Je ne suis pas ton employé et je te demande de me traiter avec plus de respect.

par contre tu es mon professeur et seulement parce que je suis familiariser avec vous
et je crois devenir un membre de vous que je n'utilise le vous de politesse
0
profiter Messages postés 205 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 15 mars 2013 8
16 août 2011 à 16:26
re-bonjour
pour bien assimiler les choses avant de commoncer a coder j'ai re-vu le code du mvc de julien39
=> j'ai trouvé que l'option d'avoir l'etat du modele chez la vue en premier lieu sans aucune action n'est pas faite ,en effet parfois dans mon internalframe j'ai une JList qui lors du lancement elle se charge par des donnees alors comment si vous avez une idee pour regler ce probleme ca d'une part

de l'autre, comme j'ai deja dit mon application contient une dizaine ou plus d'internale frame => a votre avis est ce que chaqu'une doit avoir son controleur et modele puis englober tous dans un package des modeles
ou bien un seul "gros" modele et des controleurs pour chacune ou bien ...

aussi une autre question dans mes internaleframes parfois une action sur un boutton genere : vider une table puis la remplir de la base et une liste aussi et vider et remplir 3 ou 4 ou + JTextfields et ....
mais le modele selon les implementations des vus des mvc contient une methode :
update(String ou(qlq autre)
alors a votre avis comment faire tout ces modifications avec cette methodes sans que le modele modifie directements les composants de la vue

j'espere que j'ai bien expliqué mes questions

merci d'avance
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
16 août 2011 à 18:10
Je ne comprends pas vraiment ton problème (tu ne t'exprimes pas très clairement).

De plus, tu poses une nouvelle question donc ouvre un nouveau sujet. Tu peux également rechercher des totoriels sur le MVC, il y en a par dizaines sur internet.
0
Rejoignez-nous