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 EE Discussion :

[J2EE] Structurer une application J2EE


Sujet :

Java EE

  1. #1
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 69
    Points : 72
    Points
    72
    Par défaut [J2EE] Structurer une application J2EE
    Bonjour à tous,
    Je voudrais développer une application Web avec Struts, Hibernate et Spring. Je souhaiterais savoir comment structurer mes packages java, j'entends par cela: les business objects(les beans représentants les tables relationnelles?), les dao(CRUD sur les beans), les services(la logique metiers c'est ca?), les classes action et actionform de Struts(logique applicative?).
    Je voudrais également une confirmations quant au termes cités entre parenthèses...
    en supposant que le package de base est com.compagny, comment organiser les packages? Merci d'avance

  2. #2
    Membre averti
    Inscrit en
    Août 2005
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 352
    Points : 427
    Points
    427
    Par défaut
    Pour ma part, je pense que la logique métier doit se trouver dans les objets métiers (ce n'est pas juste une bete représentation de la base).
    La logique applicative comme tu la nommes doit être dans les services (ou dans les objets métiers). Les actions Struts se contentent d'utiliser les services (pas de métier) pour récupérer un model qui sera utilisé dans la vue.

    En résumé :
    - objets métiers : données et comportement métier
    - dao : CRUD
    - services : contiennent un minimum de logique (souvent nommée logique applicative) et organisent un workflow (chargement des objets métiers, appel de la logique métier dans les objets métiers, ...)
    - controlleur (C de MVC) : appel sur la couche logique (souvent des services) pour récupérer un model que la vue se chargera de présenter.

  3. #3
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 69
    Points : 72
    Points
    72
    Par défaut
    Oh la laaaaaa j'etais complètement out
    Donc, si j'ai bien compris, si par exemple j'ai un une table Employe ayant pour champs matricule, nom, prenom et salaire, je dois avoir les éléments suivants:
    DAO
    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 EmployeDao{
    public void createEmploye(Employe e){
    ....
    }
    public void readEmploye(int matricule){
    ....
    }
    public void updateEmploye(Employe e){
    ....
    }
    public void deleteEmploye(int matricule){
    ....
    }
     
    }
    Objet metier
    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
     
    public class Employe{
    private int matricule;
    private String nom;
    private String prenom;
    private float salaire;
    /*
    *les getter setter
    */
     
    public void augmenterEmploye(float montant){
    this.setSalaire(this.getSalaire()+montant);
    DaoEmploye dao=new DaoEmploye();
    dao.updateEmploye(this);
    }
     
     
    }
    ET au niveau des actions de struts faire un appel a la methode augmenterEmploye.
    En gros c ca? ou suis je suis encore passé à coté de la plaque
    Si possible m'indiquer un lien avec des exemples concrets et merci

  4. #4
    Membre averti
    Inscrit en
    Août 2005
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 352
    Points : 427
    Points
    427
    Par défaut
    Tu n'étais pas totalement out et je ne t'ai donné qu'un point de vue. Par contre, le code que tu présentes introduis un gros problème, la relation entre tes objets métiers et les autres couches.
    Voici quelques regles à respecter :
    - ton objet métier ne doit pas avoir de dépendances avec aucune couche (pas de lien avec le dao comme tu l'as fait)
    - ta couche persistance (dao), a une dépendance vers tes objets métiers (et la technologie sous-jacente : ORM, JDBC, ...)
    - ta couche service a une dépendance vers tes objets métiers (appel de méthode métier) et vers tes DAO (chargement, update des objets métiers)
    - ton controleur a une dépendance vers tes services (appel pour enclencher le traitement métier) et vers tes objets métiers (pour former le model qui sera représenté dans la vue).

    Pour des exemples concrets et comme tu souhaites utiliser Spring, regarde les exemples qui sont fournis avec la distribution.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    509
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 509
    Points : 568
    Points
    568
    Par défaut
    Salut,
    Personnellement je fais des objet de données metier qui comme le nom l'indique ne contienne que des données et aucun traitement , ensuite tu as les service metier qui serons susceptible de fournir des service metier a plusieurs applications (couche entreprise) puis une couche application traitement propre a l'application , puis la couche presentation (Struts) il faut un minimum de code dans tes action uniquement de l'initialisation des ActionForm et appelle a des objets de la couche inferieur (Application)
    Enfin bref cet article t'en parleras meiux que moi :
    http://www.application-servers.com/articles/multicouches/index.1_0.html
    UML avec VIOLET

  6. #6
    Membre expérimenté
    Avatar de viena
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    1 071
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 071
    Points : 1 512
    Points
    1 512
    Par défaut
    Tu n'étais pas totalement out et je ne t'ai donné qu'un point de vue.
    Puisque moi je dirais que les beans et la logique métier doivent être séparés... Les beans sont voués à être transportés et ça ne sert à rien de les alourdir...
    Mais bon, ça depend beaucoup de ce que tu veux faire. Moi je travaille avec d'enormes traitements, et comme je n'aime pas avoir d'enormes classes, je préfére séparer les différentes couches.
    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java
    "La liberté de tout être s'arréte là où commence celle de l'autre... Respecter l'autre, c'est préserver sa liberté d'être, de penser et de vivre"

  7. #7
    Membre averti
    Inscrit en
    Août 2005
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 352
    Points : 427
    Points
    427
    Par défaut
    Citation Envoyé par viena
    Tu n'étais pas totalement out et je ne t'ai donné qu'un point de vue.
    Puisque moi je dirais que les beans et la logique métier doivent être séparés...
    Pourquoi devrait on séparer les données et le comportement ? Quel est la définition d'un objet ? Pourquoi devrait on ignorer toutes les bonnes pratiques objets quand on fait du J2EE ?

    Citation Envoyé par viena
    Les beans sont voués à être transportés et ça ne sert à rien de les alourdir...
    Quand tu parles de transport, tu parles de distribution ? Si c'est le problème, la solution a un nom : DTO (Data Transfer Object). Cela consiste à former un objet sérialisable à partir de tes objets métiers dans le but de le distribuer. Cet objet n'a pas de comportement métier, il contient juste des données.

    Citation Envoyé par viena
    Mais bon, ça depend beaucoup de ce que tu veux faire. Moi je travaille avec d'enormes traitements, et comme je n'aime pas avoir d'enormes classes, je préfére séparer les différentes couches.
    Pourquoi dis tu que je ne sépare pas les couches ? Il me semble au contraire que je définis exactement le role de chacune de mes couches et qu'elles ont toutes une responsabilité bien définie.
    En ce qui concerne les traitements, un certain nombre de patterns peuvent être employés pour ne pas surcharger les classes (strategy, state, ...). De plus, une bonne conception doit permettre de se passer des if/else que l'on retrouve très souvent quand la logique est implémentée sous forme de transaction script dans les services (ca sent le procédural tout ca, pas très objet).

  8. #8
    Membre averti
    Inscrit en
    Août 2005
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 352
    Points : 427
    Points
    427
    Par défaut
    Un lien pour appuyer ce que j'écris : http://www.martinfowler.com/bliki/AnemicDomainModel.html
    Je vous conseille la lecture de son livre Patterns of Enterprise Application Architecture.

    One source of confusion in all this is that many OO experts do recommend putting a layer of procedural services on top of a domain model, to form a Service Layer. But this isn't an argument to make the domain model void of behavior, indeed service layer advocates use a service layer in conjunction with a behaviorally rich domain model.
    C'est plus ou moins ce que je dis ici :
    Citation Envoyé par dlemoing
    - ta couche service a une dépendance vers tes objets métiers (appel de méthode métier) et vers tes DAO (chargement, update des objets métiers)

  9. #9
    Membre émérite
    Avatar de alexismp
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 503
    Points : 2 777
    Points
    2 777

  10. #10
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 69
    Points : 72
    Points
    72
    Par défaut
    Merci à tous pour ces points de vue. C'est très enrichissant.

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

Discussions similaires

  1. hebergement d'une application j2ee dans une intranet
    Par pascal007 dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 17/05/2010, 07h48
  2. [JBOSS]Securisation d'une application J2ee
    Par jlassira dans le forum Wildfly/JBoss
    Réponses: 1
    Dernier message: 23/11/2005, 11h59
  3. [Appli] Analyse d'une application J2EE
    Par ericw78 dans le forum Java EE
    Réponses: 3
    Dernier message: 09/11/2005, 10h09
  4. [Plugin][MyEclipse]Lancement d'une application J2EE
    Par ujoodha dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 20/04/2005, 15h48
  5. [UML]modéliser une application J2EE sous UML
    Par stago dans le forum Java EE
    Réponses: 4
    Dernier message: 22/02/2005, 10h14

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