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

Développement Web en Java Discussion :

[MVC/Organisation] Séparer le Modèle/Métier de la Vue/Controller


Sujet :

Développement Web en Java

  1. #1
    Membre habitué Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Points : 180
    Points
    180
    Par défaut [MVC/Organisation] Séparer le Modèle/Métier de la Vue/Controller
    Bonjour à tous !

    Je débute dans la programmation web en Java, et en suis au commencement de mon projet web. J'ai déjà fait le design de la base de donnée, choisi l'outil d'interaction avec la base de données (Hibernate) et généré mes POJOs et ma DAO. J'ai aussi commencé à écrire un peu de la couche métier, mais pas grand chose (quelques méthodes d'insertion).

    Pour l'instant, rien n'indique dans mon développement que ce que je fais est destiné au web (ce qui est plutôt bon signe si je veux respecter plus ou moins le modèle MVC), et je me pose la question suivante : dois-je intégrer la partie web à mon projet existant (je travaille avec Eclipse) ou est-ce plus logique de créer un second projet, un site web, qui ne contiendra que les vues et le controller, et qui aura comme dépendance mon projet "métier" ?

    Ainsi, je peux développer "tranquillement" ma partie métier, la tester avec des tests unitaires, puis la packager (je suis en train de voir pour utiliser Maven, qui pourrait grandement me faciliter la vie pour la gestion des dépendances et pour le packaging, entre autres, d'après ce que j'ai vu !) et l'utiliser dans mon projet web comme une dépendance "normale".

    De plus, ça me permettrait d'avoir un projet web assez "léger", et de me concentrer dans ce projet sur les fonctionnalités purement dédiée au web : affichage, contrôleur, etc...

    Qu'en pensez-vous ? Me fourvoierais-je complètement ? Merci d'avance pour vos réponses !

  2. #2
    Membre actif Avatar de maloups
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 332
    Points : 208
    Points
    208
    Par défaut
    Comme tu la dis, à ce stade, rien ne t'indique que tu fait un projet web, du coup, rien ne t'empeche de construire a part la partie Java...

    Pour ce qui est de la partie Web, il doit surrement être possible de faire intéragir différents projet, mais personnellement j'ai toujours travaillé sur un projet unique.
    En travaillant sur Eclipse, tu devra créer un projet Tomcat, ou mieux, un "Web Dynamic project". Dans l'un comme l'autre, tu auras une partie réservé à tes package Java, et une autre à tes Vues...

    Du coup, ca ne doit poser aucun problème de développez la partie java à part, puis de créer un projet Web, d'y intégrer tes différents packages et enfin d'y insérer tes vues...

    En esperant avoir été assez clair

    Bon courage !

  3. #3
    Membre averti Avatar de aJavaDeveloper
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 248
    Points : 300
    Points
    300
    Par défaut
    Ton objectif est de développer tes couches "standards" (métier & DAO) séparément de ta couche web.

    Pour moi, ton architecture en couches (DAO - métier - web MVC) t'assure déjà cette séparation.

    Toutefois, si tu désires renforcer cette séparation, tu peux faire en sorte que les controlleurs de ta couche web n'intéragissent avec ta couche métier que via des interfaces ou des façades.

    Si tu veux à tout prix développer tes couches dans des projets séparés, tu devrais :
    1. développer tes couches métier et DAO dans un projet Java standard
    2. exporter ce projet Java standard sous la forme d'un JAR
    3. créer un projet web
    4. importer ton JAR dans le répertoire WEB-INF/lib de ce projet web


    Mais tout cela ne me semble pas utile à partir du moment où la séparation en couches est respectée...

    ++

  4. #4
    Membre habitué Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Points : 180
    Points
    180
    Par défaut
    @maloups : Tu as été parfaitement clair, merci ! Cependant, je pense pour l'instant faire comme l'a décrit aJavaDevelopper : packager ma partie DAO/métier dans un jar, que j'incluerai ensuite dans mon application web.

    Citation Envoyé par aJavaDevelopper
    Pour moi, ton architecture en couches (DAO - métier - web MVC) t'assure déjà cette séparation.
    Tout à fait ! C'est purement pour des aspects pratique : je ne veux pas pour l'instant mettre en place "toute l'infrastructure" d'un projet web alors que je peux me contenter d'un projet java standard.

    Citation Envoyé par aJavaDevelopper
    Toutefois, si tu désires renforcer cette séparation, tu peux faire en sorte que les controlleurs de ta couche web n'intéragissent avec ta couche métier que via des interfaces ou des façades.
    C'est ce que je devrais faire dans l'idéal, mais on verra si j'ai le temps !

    Sinon, je

  5. #5
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut
    Bonjour Wookai,
    je trouve que pour quelqu'un de débutant tu en connais déja beaucoup. Bravo!
    La séparation Service/DAO est une tres bonne chose. Par contre pour des questions de convivialité de développement je ne te conseille pas de construire
    un jar pour ta partie métier/DAO.

    En effet même si tu fais des tests unitaires (ca c'est très bien), parfois il peut être assez plaisant de pouvoir débugger ta couche service/DAO dans ton application WEB. Si tu fais un jar, cela sera difficile de debugger (apres tu peux aussi installer jad qui decompile tes sources).

    Apres que tu veuilles séparer dans un jar ta couche service/DAO, je trouve cela tres bien. Ca tu peux le faire ensuite a l'aide de maven ou ANT en filtrant tes packages (service/DAO).

    Pour conclure,
    * l'avanatge de separer dans deux projets Eclipse differents est que tu es sur de ne pas faire appel a une classe (Controle) dans ta couche service/metier (Un package non utilisé dans une classe ca arrive souvent (Ctrl+Shift+o => ca enleve les packages importes non utilises dans ta classe).
    * l'inconveniannt c que tu ne peux pas debugger.

    Angelo

  6. #6
    Membre habitué Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Points : 180
    Points
    180
    Par défaut
    Citation Envoyé par azerr
    je trouve que pour quelqu'un de débutant tu en connais déja beaucoup. Bravo!
    Merci ! J'ai déjà un peu d'expérience dans le développement web (en PHP) et dans le développement Java, mais c'est la première fois que je me lance dans le web en Java ! J'essaie donc de mettre directement à profit les quelques principe que j'ai "appris" !

    Citation Envoyé par azerr
    La séparation Service/DAO est une tres bonne chose. Par contre pour des questions de convivialité de développement je ne te conseille pas de construire
    un jar pour ta partie métier/DAO.

    En effet même si tu fais des tests unitaires (ca c'est très bien), parfois il peut être assez plaisant de pouvoir débugger ta couche service/DAO dans ton application WEB. Si tu fais un jar, cela sera difficile de debugger (apres tu peux aussi installer jad qui decompile tes sources).

    Apres que tu veuilles séparer dans un jar ta couche service/DAO, je trouve cela tres bien. Ca tu peux le faire ensuite a l'aide de maven ou ANT en filtrant tes packages (service/DAO).
    Justement, j'ai découvert Maven et son système de dépendances/repository, et ça me semble un bon moyen ! Il est clair que ça va poser des problèmes au niveau du debugging, mais avec les tests unitaires, je pense que je devrais m'en sortir : si j'ai un problème, je peux le recréer dans un test unitaire, le débugger dans mon projet service/DAO, et packager mon jar dès que le bug est fixé pour le ré-utiliser dans mon appli web !

    Merci en tous cas à vous tous pour vos réponses et vos encouragements !

Discussions similaires

  1. [MVC] Organisation de code.
    Par Rakken dans le forum Général Conception Web
    Réponses: 0
    Dernier message: 13/11/2008, 11h18
  2. Réponses: 6
    Dernier message: 05/11/2008, 13h06
  3. Réponses: 4
    Dernier message: 21/02/2008, 17h05
  4. Réponses: 27
    Dernier message: 30/10/2007, 10h12
  5. [SWT][MVC] Comment séparer métier et présentation
    Par pyorg dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 27/08/2004, 18h21

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