1. #1
    Membre éprouvé Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    février 2004
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : février 2004
    Messages : 518
    Points : 405
    Points
    405

    Par défaut Partage de "ObjectContext" dans la couche BLL

    Hello tout le monde,

    Quelle est la meilleure solution pour partager mon objet "ObjectContext" entre mes différentes classes BLL.

    Je ne souhaite pas créer une propriété statique, car c'est pour une application ASP.NET et ce n'est pas du tout recommandé.

    Merci d'avance pour votre aide.

  2. #2
    Expert Confirmé
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    octobre 2010
    Messages
    1 646
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : octobre 2010
    Messages : 1 646
    Points : 3 451
    Points
    3 451

    Par défaut

    Singleton ou IoC me viennent à l'esprit.
    Tu dois vraiment avoir ton DC dans ta BLL? Généralement, je ne m'occupe de ça que dans ma DLL.
    Microsoft MVP : Windows Platform

    MCPD - Windows Phone Developer
    MCPD - Windows Developer 4

    http://www.guruumeditation.net

    “If debugging is the process of removing bugs, then programming must be the process of putting them in.”
    (Edsger W. Dijkstra)

  3. #3
    Membre éprouvé Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    février 2004
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : février 2004
    Messages : 518
    Points : 405
    Points
    405

    Par défaut

    Ma classe "ObjectContext" est dans ma couche DAL mais j'y accède depuis la couche BLL pour manipuler mes données.

    Ce que j'ai fait c'est une classe factory "ObjectContextFactory" que se situe dans ma couche DAL et qui me permet de créer et de stocker un objet "ObjectContext" pour un Thread donné :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    namespace DAL {
        public class ObjectContextFactory {
     
            /// <summary>
            /// Clé pour sauvegarder le "ObjectContext"
            /// </summary>
            public const string CONTEXT_KEY_NAME = "ObjectContextSingleton";
     
     
            /// <summary>
            /// Récupérer le "ObjectContext" du Thread en cours
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <returns></returns>
            public static T GetCurrentContext<T>() where T : new() {
     
                // ObjectContext
                T objectContext;
     
                // Si dans un context web
                if(HttpContext.Current != null) {
                    Page currentPage = (Page) HttpContext.Current.Handler; 
                    if(currentPage == null) throw new NullReferenceException("Page is null");
                    if(currentPage.Items[CONTEXT_KEY_NAME] == null) currentPage.Items[CONTEXT_KEY_NAME] = new T();
                    objectContext = (T) currentPage.Items[CONTEXT_KEY_NAME];
                }
     
                // Sinon
                else {
                    objectContext = (T) CallContext.GetData(CONTEXT_KEY_NAME);
                    if(objectContext == null) {
                        objectContext = new T();
                        CallContext.SetData(CONTEXT_KEY_NAME, objectContext);
                    }
                }
     
                // Retourne le "ObjectContext"
                return objectContext;
            }
        }
    }
    Qu'en pensez-vous ? Est-ce une bonne façon de faire ?

  4. #4
    Expert Confirmé
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    octobre 2010
    Messages
    1 646
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : octobre 2010
    Messages : 1 646
    Points : 3 451
    Points
    3 451

    Par défaut

    J'imagine que tu stockes l'ObjectContext dans le Handler pour le garder entre les requêtes. Pour las appli ASP.NET il vaut mieux un ObjectContext par requête dans la plupart des cas. Tu peux le stocker alors dans HTTPContext.Items. L'ObjectContext ne doit pas avoir une durée de vie trop longue, et ne prend pas beaucoup de ressources lors de sa création.
    Microsoft MVP : Windows Platform

    MCPD - Windows Phone Developer
    MCPD - Windows Developer 4

    http://www.guruumeditation.net

    “If debugging is the process of removing bugs, then programming must be the process of putting them in.”
    (Edsger W. Dijkstra)

Discussions similaires

  1. [vbnet 1.1]Inserer deux simple quote sans texte dans une db
    Par ChristopheOce dans le forum Windows Forms
    Réponses: 8
    Dernier message: 15/03/2007, 08h51

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