Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Membre éprouvé Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    février 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : février 2004
    Messages : 516
    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 Olivier Matis
    .Net Architect
    Inscrit en
    octobre 2010
    Messages
    1 623
    Détails du profil
    Informations personnelles :
    Nom : Homme Olivier Matis
    Âge : 39
    Localisation : Belgique

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

    Informations forums :
    Inscription : octobre 2010
    Messages : 1 623
    Points : 3 405
    Points
    3 405

    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
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : février 2004
    Messages : 516
    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 :
    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 Olivier Matis
    .Net Architect
    Inscrit en
    octobre 2010
    Messages
    1 623
    Détails du profil
    Informations personnelles :
    Nom : Homme Olivier Matis
    Âge : 39
    Localisation : Belgique

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

    Informations forums :
    Inscription : octobre 2010
    Messages : 1 623
    Points : 3 405
    Points
    3 405

    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)

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •