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

Spring Java Discussion :

Architecture d'un projet web


Sujet :

Spring Java

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2008
    Messages : 97
    Points : 52
    Points
    52
    Par défaut Architecture d'un projet web
    Bonjour,

    J'aimerai prendre vos conseils sur l'architecture d'un projet web avec Spring. j'ai lu pas mal d'articles sur comment organisé les classes, les interfaces et les packages. Mon projet est simple mais j'ai voulu juste l'organiser en séparant chaque couche à part.

    le modèle UML du projet est la suivantes. j'ai 4 tables (contact,adresse,phonenumber,groupContact,ebtreprise) qui sont reliés par des relations de type (many-to-many, one-to_many,heritage,etc).

    les actions que je peut le faire (ajout,suppresion,modification,recherche). la base de données est Mysql.

    J'ai réussi a faire marché tout ca mais lorsque je vois mon projet c'est le grand bazar j'ai toutes mes classes dans un seul package. je n'ai pas utilisé aucune interface.

    Je sait bien qu'il faut séparer entre les vues utilisateur, métier, accès aux données. Mais j'arrive pas à les distinguer.

    merci.

  2. #2
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Je te conseil l'organisation suivante, mais il y en a d'autres aussi, ce n'est qu'un exemple, à toi de voir ce qui te convient le mieux

    Pour les objets métier : ton.package.entities ou bien model sinon businessmodel

    Pour les fonctions CRUD : ton.package.services pour les interfaces, et ton.package.services.impl pour les classes concrètes.

    Quant à la vue, tu as des pages web et des controllers qui les gèrent : ton.package.web.controllers, les pages étant dans un sous-dossier views de ton WEB-INF.

    Les fichiers de config sont presque tous dans le dossier WEB-INF...

    voilà, c'est comme ça que je fais, et je trouve que ça reste quand même bordélique malgré tout

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2008
    Messages : 97
    Points : 52
    Points
    52
    Par défaut re
    Merci pour ta réponse.

    Citation Envoyé par r.othman Voir le message
    Je te conseil l'organisation suivante, mais il y en a d'autres aussi, ce n'est qu'un exemple, à toi de voir ce qui te convient le mieux

    Pour les objets métier : ton.package.entities ou bien model sinon businessmodel

    j'ai pas bien saisi c'est exactement les objets métier est ce que se sont les fonction d'ajout de suppression et modifications si c'est le cas je fais quoi dans la couche accès au données car j'ai une classe DAO qui contient les méthode d'ajout,suppression et modification.

    Pour les fonctions CRUD : ton.package.services pour les interfaces, et ton.package.services.impl pour les classes concrètes.

    c'est quoi les fonction CRUD ? en faite je vois pas l'utilité exacte de l'utilisation des interfaces.

    Quant à la vue, tu as des pages web et des controllers qui les gèrent : ton.package.web.controllers, les pages étant dans un sous-dossier views de ton WEB-INF.

    oui j'ai des pages jsp pour les formulaires et les affichages

    Les fichiers de config sont presque tous dans le dossier WEB-INF...

    voilà, c'est comme ça que je fais, et je trouve que ça reste quand même bordélique malgré tout
    finalement, je te décrit un peu petit le fonctionnement d'un exemple . Après l'identification de l'utilisateur il choisi une des fonctions à réaliser il rempli un formulaire un pages jsp qui va envoyer les données à une servlet cette dernière récupère les données et appel une des méthodes de la classe DAO qui se charge d'ajouter ou de supprimer ou de modifier le contact dans la base de données.

  4. #4
    Membre à l'essai
    Inscrit en
    Décembre 2010
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Le fonctions CRUD sont tout simplement : CReate Update Delete

    Tes DAO s'occupent de l'enregistrement en base de données, par exemple MySQL dans ton cas.

    La couche Services elle va utiliser tes DAO pour l'enregistrement et faire d'autres tâches, on parle de logique métier...faire des calculs, vérifier qu'un montant est supérieur à un seuil...etc.

    L'utilité des interfaces est que si dans ta couche Service tu souhaite changer tes DAO, pour disons passer sur une base SQLite, tu n'auras pas a changer le code sources des Services, juste l'injection de nouveaux DAO SQLite,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    class UserServiceImpl implements UserService {
        UserDAO userDAO;
    }
    et tes DAO :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    class MySQLUserDAO implements UserDAO {....}
     
    class SQLiteUserDAO implements UserDAO{....}
    avec ton fichier de config Spring, si tu veux passer d'une base MySQL à une base SQLite, tu le fais simplement en changeant le bean "UserDAO" qui sera injecté dans ton service, et ton service tu ne le touche plus

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2008
    Messages : 97
    Points : 52
    Points
    52
    Par défaut
    Je vois que la discussion n'est pas intéressante pour la comité développez ou peut être qu'ils font encore la fête :-) .

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par lotfi-g Voir le message
    Je vois que la discussion n'est pas intéressante pour la comité développez ou peut être qu'ils font encore la fête :-) .
    Lendemains obscures en tout cas...

    Si tu veux découper en couches (fortement recommandé), tu peux t'appuyer sur l'architecture MVC, elle s'y prête bien.
    Tu pourrais avoir ces packages :

    ton.application.model (pour tout ce qui concerne le modèle métier)
    ton.application.vue (pour tout ce qui concerne les données utilisées par les pages jsp)
    ton.application.controleur (pour les contrôleurs de formulaires)

    Tu peux accessoirement subdiviser model en model.entity, model.dao (+ model.crud si tu veux séparer mais pour moi, c'est un dao).

    Après, les pages jsp peuvent être placées dans un répertoire "vue" sous WebContent (ou Web-Inf).
    Il pourrait être judicieux également de subdiviser les différents éléments par thème (contact, entreprise, adresse, ...)

    Bref, il y a beaucoup de façon de voir la chose, la seule chose certaine, c'est que tout mettre au même niveau ne va pas aider à la maintenance.

    Pour ce qui est des interfaces, si tu as une notion de "contrat" qui se rattache à plusieurs classes, alors oui, il faudrait les utiliser pour une meilleure abstraction.

  7. #7
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2008
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2008
    Messages : 97
    Points : 52
    Points
    52
    Par défaut
    Bonjour

    juste une questions vous voulez dire quoi par notion de contrat.

    merci

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Le principe d'une interface est de définir un "contrat".
    Une classe implémentant une interface s'engage à répondre intégralement au contrat.
    Plusieurs classes peuvent implémenter une même interface.

    Un exemple : on va parler d'une interface "déplaçable".
    Elle aura comme méthodes :
    - tourner à droite
    - tourner à gauche
    - avancer
    - reculer

    Une voiture implémentera "déplaçable", un bateau également, un avion aussi etc...
    Pourtant, le code permettant de déplacer ces "mobiles" est très spécifique.
    Charge à chacun de faire ce qu'il y a à faire.

    Maintenant, si on se place d'un point de vue contrôleur de "mobiles", on va traiter notre liste d'objets au travers de l'interface "déplaçable" (alors que physiquement, on a une classe Voiture, Bateau, Avion...)
    De ce fait, on se fiche royalement de la classe d'instance, on ne la voit que sous sa forme contractuelle et on peut les déplacer en utilisant directement les méthodes adéquates.
    Si demain un autre type d'objet doit être ajouté, rien ne change du côté du contrôleur.

  9. #9
    Membre habitué
    Inscrit en
    Avril 2010
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 342
    Points : 161
    Points
    161
    Par défaut
    envoyé par OButterlin
    ton.application.model (pour tout ce qui concerne le modèle métier)
    ton.application.vue (pour tout ce qui concerne les données utilisées par les pages jsp)
    ton.application.controleur (pour les contrôleurs de formulaires)
    Et envoyé par r.othman
    Pour les objets métier : ton.package.entities ou bien model sinon businessmodel

    Pour les fonctions CRUD : ton.package.services pour les interfaces, et ton.package.services.impl pour les classes concrètes.

    Quant à la vue, tu as des pages web et des controllers qui les gèrent : ton.package.web.controllers, les pages étant dans un sous-dossier views de ton WEB-INF.
    1) Que faire s'il vous plait si j'ai une application qui intègre par exemple la gestion du stock, la gestion du personnel et la gestion des finances ? Est ce que je vais mettre le modèle métier de ces trois schéma/modules dans le même package ?

    2) Et si on veut intégrer Hibernate, comment sera gérer le.package.entities ?

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 141
    Points : 178
    Points
    178
    Par défaut
    Le principe dans une application d'avoir une bonne sépararation en couche une fois que la séparation en couche est faite, le choix des packages ne se pose plus. Tout ce qui se fait dans une architecture en couche ne doit concerner que les interfaces, car seules les interfaces seront utilisées par Spring à part la couche de persistence ou les objets sont des POJO, et peut être la classe du contrôleur. Une architecture classique est d'avoir une couche de persistance, une couche dao,une couche service, et une couche web. Seule la couche service gérée par Spring tisse le lien entre les différentes couches. Si on choisi d'appeler le packqge par défaut fr.appli, pourquoi pas avoir fr.appli.persistence, pour la couche de persistance, fr.appli.dao pour l'interface dao et fr.appli.dao.impl pour l'implémentation ainsi de suite pas la peine de se prendre la tête les gens...

Discussions similaires

  1. Architecture N-Tier Projet Web PHP
    Par Holig dans le forum Langage
    Réponses: 5
    Dernier message: 29/07/2013, 13h55
  2. Architecture de projet web Java ?
    Par Smix007 dans le forum Général Java
    Réponses: 2
    Dernier message: 11/07/2011, 14h03
  3. Question architecture projet Web
    Par denebj dans le forum Développement Web en Java
    Réponses: 4
    Dernier message: 07/05/2010, 14h34
  4. Architecture projet Web Gwt-Ext
    Par ASPAK dans le forum GWT et Vaadin
    Réponses: 7
    Dernier message: 05/03/2009, 13h46
  5. Architecture projet Web
    Par shlag dans le forum Subversion
    Réponses: 3
    Dernier message: 09/06/2008, 09h35

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