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

Struts 1 Java Discussion :

[ARCHI J2EE] action->service->DAO


Sujet :

Struts 1 Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 26
    Points : 29
    Points
    29
    Par défaut [ARCHI J2EE] action->service->DAO
    Bonjour,

    Je me pose des questions sur un point concernant les archi n-tiers.
    Je suis dans le cas d'une appli struts/hibernate.
    Je veux faire des tableaux de reporting dans ma partie struts.
    Pour le moment je creais ma jsp et faisais appel dans mon action a une methode de ma DAO qui me renvoyait une liste d'objets a afficher.
    Cas d'ecole !
    Mais on me dit qu'il ne faut pas faire appel aux DAO dans la partie presentation ... mais qu'il faut passer par la coucher service.
    Pourquoi pas ... mais cela impliquerait que je cree une service wrapper de ma dao pour chq dao dont j'ai besoin dans ma couche de presentation ?
    Que pensez vous de cela ?

    merci de vos conseils

  2. #2
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    D'un point de vue archi, et d'une manière générale, raisonner en termes de services + dao est une bonne chose. Les dao sont dédiés au chargement d'objets et les services vont, éventuellement, faire appel à plusieurs dao pour retourner des grappes d'objets.
    Maintenant c'est à toi de voir ce que fourni ton dao. Si c'est exactement un objet "simple" et que tu ne mets pas trop d'intelligence métier dans le dao, c'est totalement jouable. A toi finalement d'imaginer des scénarii d'évolution de ton application pour voir si les options que tu prends ne seront pas un obstacle trop lourd par la suite.
    Mon avis, ayant fait du reporting financier, je partirai quand même sur service+dao (mais là ce n'est qu'un avis de vieux qui se dit que cela ne coûtera pas plus cher, ne sera pas plus lent et préparera sûrement mieux un avenir que l'on sait souvent incertain)

    A toi de choisir.......

  3. #3
    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 ego,
    le role de la couche service, permet de gerer ton metier (ex : lors de la creation d'un utilisateur, on verifie que le login n'existe pas). Au premier abord, on peut se dire, que ce test métier peut s'effectuer dans la couche Action Struts. Mais maintenant imagine qu'une autre Action ou une autre Application, souhaite aussi créer un utilisateur, ceci necessite de dupliquer ce test métier.
    La couche service permet entre autres de proposer des composants métier qui sont à la disposition de l'entreprise.

    Si tu es interesse, j'ai tente de decrire l'architecture service/DAO dans mon projet open source GestCV que tu peux trouver sur http://gestcv.sourceforge.net/fr/architecture.html

    Angelo

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 138
    Points : 1 504
    Points
    1 504
    Par défaut
    A ce propos je te recommande le document sur le modèle MVC présent sur ce site.
    Ca vaut le coup

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 26
    Points : 29
    Points
    29
    Par défaut
    Bonjour,
    je vois tout a fait l'archi multi-tiers et comment elle se presente.
    Ma question etait tres ciblee : dans un cas de reporting !
    En gros je ne fait appel qu'a des requete HQL dont j'affiche le resultat : il n'y a pas de code metier !
    Dans ce cas precis, cela est il handicapant pour la maintenance et l'evolution de rajouter une couche de service entre la DAO et mon action struts, ou est ce que cela pour s'averer interessant en terme d'evolutivite de l'applicatif.
    Car en fait ma couche de service, si je la rajoute, ne fera que wrapper mes methodes de dao.

    Merci de vos conseils et de vos retours

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    Non, ce n'est pas pénalisant du tout, rassure toi.
    Cela vas au contraire t'apporter un niveau d'isolation entre ta couche de présentation et ta couche de données.

    D'un point de vus purement métier, sache que c'est le cas d'utilisation qui doit être transactionnel (ACID) et non l'accès unitaire à la base de données aussi, cela t'apporteras une plus grande souplesse pour gérer cet aspect sur tes applications.

  7. #7
    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 ego,
    si tu veux supprimer la couche métier, en utilisant Hibernate, il faut faire très attention aux appels de tes méthodes getter des tes objets (Bean, model,...) que tu mappes avec Hibernate.

    En effet les objets mappes par Hibernate sont persistents, et donc surveilles par la session factory. Autrement dit si lors de l'edition de ton rapport tu fait appel a un getter qui se declenche en mode lazy, ceci va tenter d'executer une requete, et si ta session est ferme, tu risque d'avoir des problemes.
    A ce probleme, plusieurs solutions :

    1. copie des informations Bean dans une DTO (normalment c la couche service qui s'en occupe). Du coup dans ton rapport tu travaiiles avec des DTO et pas des Bean (qui sont surveilles par la session factory).

    2. detachement de tes objets Bean (session.evict je croies).

    3. garder la session hibernate tout le long de la generation de ton rapport, puis la fermer a la fin (voir Open In View dans les forums Hibernate), mais ca je ne le conseille pas trop.

    Bon courage

    Angelo

  8. #8
    Nouveau membre du Club
    Inscrit en
    Avril 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 26
    Points : 29
    Points
    29
    Par défaut
    J'utilise en effet l'open session in view.
    Mais g du mal a comprendre :
    D'un point de vus purement métier, sache que c'est le cas d'utilisation qui doit être transactionnel (ACID) et non l'accès unitaire à la base de données aussi, cela t'apporteras une plus grande souplesse pour gérer cet aspect sur tes applications.
    Cela voudrait dire que ce sont mes methodes metiers qui doivent etre transact et non mes operations atomiques sur la base de donnees ?

    Merci de vos retours

  9. #9
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    Oui

Discussions similaires

  1. Réponses: 6
    Dernier message: 28/05/2012, 17h29
  2. Réponses: 0
    Dernier message: 20/04/2011, 15h07
  3. DC avec couche service et dao
    Par jaljal dans le forum Diagrammes de Classes
    Réponses: 10
    Dernier message: 29/09/2009, 16h25
  4. Réponses: 3
    Dernier message: 01/03/2007, 21h26
  5. Réponses: 5
    Dernier message: 12/05/2006, 22h02

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