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

Autres Discussion :

Transaction dans couche métier


Sujet :

Autres

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 28
    Points : 22
    Points
    22
    Par défaut Transaction dans couche métier
    Bonjour,

    Je rencontre un petit problème conceptuel. J'essaie de développer un petit programme basé sur une architecture 3 tiers (DAL, BLL, IU).

    Dans ma DAL j'ai 2 methodes : LoadArticle(IdArticle) et LoadNomenclature(IdArticle).

    LoadArticle va lire les données de la table Articles et LoadNomenclature va lire les données de la table Nomenclatures suivant l'IdArticle passé en paramètre.
    Dans ma BLL j'ai une méthode ChargerArticle(IdArticle) qui fait appel aux 2 méthodes de ma DAL.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    BLL.ChargerArticle(IdArticle)
    	[BeginTransaction]
    	DAL.ChargerArticle(IdArticle)
    	DAL.ChargerNomenclature(IdArticle)
    	[Commit]
    J'aimerai regrouper les 2 méthodes de ma DAL au sein d'une même transaction.

    Le problème c'est que je ne sais pas comment m'y prendre.
    L'objet Transaction s'appuie sur l'objet Connection mais la connexion n'existe que dans la DAL.
    Donc comment faire pour débuter une transaction dans la BLL? Si la connexion doit être géré par la BLL on introduit alors un élément de la DAL, ce qui n'est pas forcément recommandé.

    Quelles sont les bonnes pratiques à appliquer dans ce cas?

    D'avance merci pour votre aide.

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Points : 2 336
    Points
    2 336
    Par défaut
    Citation Envoyé par rumpeballe Voir le message
    Bonjour,

    Je rencontre un petit problème conceptuel. J'essaie de développer un petit programme basé sur une architecture 3 tiers (DAL, BLL, IU).

    Dans ma DAL j'ai 2 methodes : LoadArticle(IdArticle) et LoadNomenclature(IdArticle).

    LoadArticle va lire les données de la table Articles et LoadNomenclature va lire les données de la table Nomenclatures suivant l'IdArticle passé en paramètre.
    Dans ma BLL j'ai une méthode ChargerArticle(IdArticle) qui fait appel aux 2 méthodes de ma DAL.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    BLL.ChargerArticle(IdArticle)
    	[BeginTransaction]
    	DAL.ChargerArticle(IdArticle)
    	DAL.ChargerNomenclature(IdArticle)
    	[Commit]
    J'aimerai regrouper les 2 méthodes de ma DAL au sein d'une même transaction.

    Le problème c'est que je ne sais pas comment m'y prendre.
    L'objet Transaction s'appuie sur l'objet Connection mais la connexion n'existe que dans la DAL.
    Donc comment faire pour débuter une transaction dans la BLL? Si la connexion doit être géré par la BLL on introduit alors un élément de la DAL, ce qui n'est pas forcément recommandé.

    Quelles sont les bonnes pratiques à appliquer dans ce cas?

    D'avance merci pour votre aide.
    En fait tout dépend de ce que tu utilises comme framework si tu utilises Spring et son pattern IoC tu peux imaginer injecter un service dans un autre (je n'utilise pas la même terminologie que toi)

    Faire du transactionel au niveau dao est une erreur. Mais maintenant en cas d'échec veux tu vraiment que l'ensemble des opérations (ca peut être un batch ou un autre long traitement provoque des rollbacks sur l'ensemble des données)

    Au travers de mes expériences je préfère de loin avoir au pire quelques données stockées en base que d'annuler l'ensemble des opérations pour une simple erreur (c'est tout le problème des développeurs qui soulèvent des Exception à tout moment et notamment l'usage du mécanisme de rollback lors de la première exception)

    Après cela dépend du type d'application que tu développes, si n'importe quel requête doit être faite de manière transactionnel ou pas, je suis toujours surpris de voir les pratiques que font certains développeurs pour rendre des applications dont les traitements ne sont pas critiques paranoié au point de tout rendre transactionnel.

    Ils oublient ce qu'implique un traitement dit transactionnel et les systèmes de verrous et de blocage des données qui peuvent être provoqués (pour du simple accès aux données)

    Garantir les données lors d'update ou d'insertion est une chose (si aucun rollback n'est soulevé), bloqué un système lors de simple lecture en est une autre.

Discussions similaires

  1. Réponses: 3
    Dernier message: 17/06/2009, 08h34
  2. Comment utiliser un publish/suscriber dans ma couche métier
    Par adrienfehr dans le forum Framework .NET
    Réponses: 5
    Dernier message: 14/05/2009, 11h57
  3. [Thread] Lancer la couche métier dans un thread dédié
    Par cheprod dans le forum Général Java
    Réponses: 5
    Dernier message: 06/05/2009, 23h11
  4. Réponses: 1
    Dernier message: 07/11/2008, 09h16
  5. Intégration des couches métiers dans Rails
    Par MeMyself&I dans le forum Ruby on Rails
    Réponses: 2
    Dernier message: 19/03/2008, 12h00

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