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

C# Discussion :

[Concept] Lire la configuration dans la couche d’accès aux bases de données ?


Sujet :

C#

  1. #1
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424
    Par défaut [Concept] Lire la configuration dans la couche d’accès aux bases de données ?
    Bonjour;

    Je veux votre avis sur le concept suivant:

    Pour un concept multi-couches: A mon avis le faite d’accéder à la configuration (app.config ou web.config ) dans les classes de la couche d'accès au données n'est pas une bonne pratique?

    Je pense que la couche d’accès aux données doit avoir son rôle unique " accès aux bases de données" ,sinon on trouvera des problèmes si on veut réutiliser cette couche pour d'autre application?!!.


    Je veux votre avis sur ça ?!!

    Merci

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 24
    Points : 47
    Points
    47
    Par défaut
    Si dans les couches autres que l'applicatif tu vas chercher de la configuration, alors tu contraints l'applicatif à se soumettre au mode de paramétrage de la couche d'accès aux données par exemple.

    Il est plus souple de ne pas l'imposer, ça c'est sûr mais sur de petits projets ça reste pas complètement fou de récupérer par exemple une chaîne de connexion dans la section ConnectionStrings à mon avis...

  3. #3
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424
    Par défaut
    Citation Envoyé par SLiM_ViNCe Voir le message
    Si dans les couches autres que l'applicatif tu vas chercher de la configuration, alors tu contraints l'applicatif à se soumettre au mode de paramétrage de la couche d'accès aux données par exemple.

    Il est plus souple de ne pas l'imposer, ça c'est sûr mais sur de petits projets ça reste pas complètement fou de récupérer par exemple une chaîne de connexion dans la section ConnectionStrings à mon avis...
    Je peux tolérer le faite de lire la configuration pour le cas des données fortement liées à la fonctionnement de ma couche, parmi elle les données de connexion (ConnectionStrings ) ;mais pour les données de configuration liées plus au métier (business logic Layer), je ne crois pas que c'est le bon endroit pour le faire ,même si que ces données peuvent être utilisés par cette couche pour faire un traitement (exemple : nombre d'essaie pour marquer une ligne en erreur)

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Chaque couche peut aller lire la configuration lorsque nécessaire, c'est l'objectif du ConfigurationManager de .NET.

    S'il y a beaucoup de CustomSections et/ou que les infos nécessitent un traitement spécifique, on peut envisager de créer un module spécifique et indépendant qui se chargera d'aller lire ces sections à la demande. Ce module sera ensuite appelé indifféremment par les différentes couches.

    On peut aussi ajouter une couche "CLL" (Config Logic Layer), qui permettrait de charger les sections en mémoire par exemple au démarrage de l'appli. Puis cette couche serait interrogée par les autres lorsqu'elles en ont besoin. On peut l'intégrer ou non dans la DAL. Mais à mon avis ce scénario est surtout utile dans des cas où il y a une réelle complexité à gérer au niveau de la config.

    Bref il y a pas mal de possibilités, je n'ai pas connaissance d'une best practice à ce sujet mais si quelqu'un en a, je suis preneur

  5. #5
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424
    Par défaut
    Citation Envoyé par DotNetMatt Voir le message
    Chaque couche peut aller lire la configuration lorsque nécessaire, c'est l'objectif du ConfigurationManager de .NET.
    Je ne suis pas d'accord, ça posera de problème si ma future application n’implémente pas un fichier configuration (app.config ou web.config); par exemple si ma future application utiliser un simple fichier text, donc je suis obliger à chercher tous les endroits où j'ai mis "ConfigurationManager" pour le changer par ma nouvelle méthodes de chercher les configs,et c'est loin d’être un bon résultat de l'utilisation du concept mutli-couche ( minimiser les modifications dans réutilisation,.....).

    je dis peut être faire passer les configs en paramètre pour les méthodes (couche DAL ) qui utilisent ces configs?!!


    Citation Envoyé par DotNetMatt Voir le message
    S'il y a beaucoup de CustomSections et/ou que les infos nécessitent un traitement spécifique, on peut envisager de créer un module spécifique et indépendant qui se chargera d'aller lire ces sections à la demande. Ce module sera ensuite appelé indifféremment par les différentes couches.

    On peut aussi ajouter une couche "CLL" (Config Logic Layer), qui permettrait de charger les sections en mémoire par exemple au démarrage de l'appli. Puis cette couche serait interrogée par les autres lorsqu'elles en ont besoin. On peut l'intégrer ou non dans la DAL. Mais à mon avis ce scénario est surtout utile dans des cas où il y a une réelle complexité à gérer au niveau de la config.
    oui, une méthode comme ça va me regrouper toutes les accès aux configs et même plus opter pour une classestatic pour charger une seul fois mes configs.

    mais l'appel de cette classe (j'envisage que j'ai une seule classe de config ) se fait dans la couche DAL ,ou bien faire l'appel dans la couche métier - faire passer les paramètres aux méthodes - ?

  6. #6
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par azstar Voir le message
    Je ne suis pas d'accord, ça posera de problème si ma future application n’implémente pas un fichier configuration (app.config ou web.config); par exemple si ma future application utiliser un simple fichier text, donc je suis obliger à chercher tous les endroits où j'ai mis "ConfigurationManager" pour le changer par ma nouvelle méthodes de chercher les configs,et c'est loin d’être un bon résultat de l'utilisation du concept mutli-couche ( minimiser les modifications dans réutilisation,.....).

    je dis peut être faire passer les configs en paramètre pour les méthodes (couche DAL ) qui utilisent ces configs?!!
    Effectivement ça dépend des cas, mais comme tu as juste mentionné les fichiers de config classique app et web.config, je n'ai pas inclu d'éléments de réponse liés à d'autres formats

    Citation Envoyé par azstar Voir le message
    oui, une méthode comme ça va me regrouper toutes les accès aux configs et même plus opter pour une classestatic pour charger une seul fois mes configs.

    mais l'appel de cette classe (j'envisage que j'ai une seule classe de config ) se fait dans la couche DAL ,ou bien faire l'appel dans la couche métier - faire passer les paramètres aux méthodes - ?
    Comme je l'ai dit, je ne sais pas s'il y a des recommandations à suivre à ce sujet, mais personnellement ça ne me choque pas d'aller chercher des infos de config depuis la BLL et depuis la DAL.

    Par exemple dans une appli, j'ai des noms de fichiers XML à récupérer dans mon web.config. Je n'en ai besoin que dans la BLL donc l'appel ne se fait qu'à ce niveau.

    Ma DAL va aussi chercher des infos, comme par exemple les chaînes de connexion aux bases de données.

    Dans un autre projet, on chargeait au démarrage l'ensemble des paramètres dans un objet spécifique, qui ensuite transitait dans toute l'application. Un peu à la façon d'un DTO alimenté par la DAL.

    Après, singleton ou pas singleton, c'est à toi de voir en fonction des besoins ! Tu peux envisager d'en mettre un si les paramètres sont les mêmes pour tous les utilisateurs de l'application.

  7. #7
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Voici comment on fonctionne dans mon équipe:
    - déjà, la majorité des classes sont instanciées par le conteneur IOC. On place donc les dépendances dans le constructeur.
    - on crée la classe de la section de conf qui nous intéresse. (BiduleConfSection)
    - on en extrait l'interface (IBiduleConf)
    - la classe qui a besoin de la conf l'a en paramètre de son constructeur
    - le conteneur IOC lit la conf, extrait la section, et l'enregistre.

    Un exemple concret:
    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
    19
    20
    21
    22
    23
    public class BiduleConfSection : ConfigurationSection, IBiduleConf
    {
            [ConfigurationProperty("Module")]
            public string Module
            {
                get { return (string)base["Module"]; }
            }
    }
    public interface IBiduleConf { string Module { get; } }
     
    public class DAO
    {
      private readonly IBiduleConf conf;
      public DAO(IBiduleConf conf)
      {
        this.conf = conf;
      }
    }
     
    // dans la méthode d'init de l'appli
    var biduleConf = (IBiduleConf)ConfigurationManager.GetSection("BiduleConf");
    ...
    var leDaoEnQuestion = new DAO(biduleConf);
    Comme ça, seule la méthode d'init lit la conf, et tes objets n'ont pas de dépendance sur le namespace System.Configuration.

  8. #8
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424
    Par défaut
    Bonjour;

    Comme je l'ai dit, je ne sais pas s'il y a des recommandations à suivre à ce sujet, mais personnellement ça ne me choque pas d'aller chercher des infos de config depuis la BLL et depuis la DAL.

    Par exemple dans une appli, j'ai des noms de fichiers XML à récupérer dans mon web.config. Je n'en ai besoin que dans la BLL donc l'appel ne se fait qu'à ce niveau.
    Je pense que si ces données sont utilisées pour des traitements qui ne vent pas parasiter le rôle de la couche DAL ,oui je suis d'accord mais avec une classe dédiée ou bien avec la méthode de Guulh

    Sinon, je tomberai sur une traitement que doit être la faite dans la couche métier. Donc pour les configs liées au métier, logiquement, pas besoin être lu dans la couche DAL ?

Discussions similaires

  1. [AC-2007] Lire et écrire dans une propriété de la base de donnée
    Par JesusHansHuberVorme dans le forum VBA Access
    Réponses: 8
    Dernier message: 22/11/2010, 14h15
  2. Comment testez-vous vos couches d’accès aux données (DAL) ?
    Par nico-pyright(c) dans le forum Général Dotnet
    Réponses: 20
    Dernier message: 12/11/2009, 18h42
  3. Réponses: 4
    Dernier message: 23/04/2008, 17h11
  4. [DAO] Programmer une couche d’accès aux données (dot.net)
    Par Promeneur dans le forum Autres
    Réponses: 8
    Dernier message: 20/03/2007, 14h50
  5. Mysql Configuration nombre de connexion aux bases de données
    Par Thierry8 dans le forum Installation
    Réponses: 2
    Dernier message: 15/09/2005, 20h54

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