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 :

Les singletons dans une appli web?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2006
    Messages : 131
    Par défaut Les singletons dans une appli web?
    Bonjour,

    J'ai récemment appris le concept de singleton et j'en ai déjà utilisé dans des application type WinForm.
    J'explique ce que j'entends par singleton avec l'exemple suivant :
    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
    public class MaClasse
    {
        private static MaClasse instance_;
     
        public static MaClasse GetInstance()
        {
            if (instance_ == null)
            {
                instance_ = new MaClasse();
            }
            return instance_;
        }
     
        private MaClasse()
        {
     
        }
    }
    Le but étant d'obtenir (ici via la méthode GetInstance()) une instance d'un objet qui restera la même pendant toute la durée de l'exécution du programme.
    Dans les applications Windows que j'ai développé, pas de problème car il n'y avait qu'un utilisateur par application.
    Or maintenant je travaille sur un site WebForm et quand j'utilise ce type de code, l'instance en question est la même pour tous les utilisateurs... Cette réaction était prévisible mais je me demandais si il existait une technique pour conserver en mémoire une instance d'objet par utilisateur.
    Sachant, pour compliquer ma petite affaire, que l'objet en question n'est pas dans le dossier App_code du site mais dans une bibliothèque de classes référencée par le site (un .dll que je compile et place dans /Bin)

    A vous de me dire si ce que je souhaite relève de la science fiction

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 33
    Par défaut
    Il est vrai que tu ne peux pas utiliser de Singleton de la même façon qu'un application WinForms.

    Personnellement, je l'implémente de cette façon:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public class Database
    {
        public static Database Current
        {
            get
            {
                return (HttpContext.Current.Items["Database"] ??
                    (HttpContext.Current.Items["Database"] = 
                    new Database())) as Database;
     
            }
        }
    }
    Utilise le HttpContext .

  3. #3
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    Je vais peut-etre repondre a cote de ta question, mais qu'est-ce qui te motive dans l'utilisation d'un singleton en webforms ?

    Dans 80% des cas, le singleton est utilisé à mauvais escient, voire provoque des bugs (locks, pb de conditions bloquantes etc...), et peut etre avantageusement remplacé par un objet deja existant du framework (utiliser la session peut etre une solution, meme si le code de galpha me fait un peu peur...)

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  4. #4
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2006
    Messages : 131
    Par défaut
    L'objectif est de maintenir un objet dataSet en vie pour un utilisateur entre deux chargement de page.
    Si mon objet DataSet était crée dans mon site web même, je l'aurrai stocké dans :
    - Une Session (HttpContext.Current.Session)
    - Ou encore plus fou, dans un ViewState (bien que ça doit être désastreux pour la bande passante de stocker autant d'informations sur la page du client...

    Mais ma solution VB a été faite de façon très scolaire :
    - Un projet de site web
    - Un projet librairie de classes pour le modele (les classes métier)
    - Un projet librairie de classes qui contient mon dataSet Typé
    - Un projet librairie de classes pour ma dal qui contient des classes avec des méthodes statiques qui tapent dans le dataset pour fournir/mettre à jour en base les classes métiers.

  5. #5
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    Citation Envoyé par jowsuket Voir le message
    L'objectif est de maintenir un objet dataSet en vie pour un utilisateur entre deux chargement de page.
    ...a ne pas faire

    Le probleme du dataset, c'est que le conserver en memeoire risque de te faire peterla memoire a moyen terme.

    Les datasets sont generalement de gros objets, et le fait de les stocker en memoire risque de faire planter le site en fonction de la charge.

    Si tu as des données à stocker d'un appel a l'autre, il vaut mieux eventuellement stocker tes objets metiers en session, le mieux etant de ne conserver que l'id de ton objet

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  6. #6
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2006
    Messages : 131
    Par défaut
    D'accord, merci pour l'information.
    Mais ceci m'amène à la question suivante :
    Pont-on exploiter de façon efficace un DataSet si on ne peut pas le garder en mémoire?
    Un dataset par définition permet de stocker temporairement des enregistrements (avec la méthode fill) et de les mettre à jour (avec la méthode update) en vérifiant la concurrence. Si on ne peut pas stocker le DataSet une fois charger, ça veut dire que pour faire un update depuis une page web on doit au même moment :
    - Le recharger
    - Le modifier
    - Déclencher la mise à jour (update du/des dataAdapter)
    Du coup on obtient l'équivalent d'une solution en mode connecté... Y'a-t-il un intéret d'utiliser un DataSet?
    Enfin je crois que je m'éloigne quelque peu du topic de mon post initial.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/08/2006, 14h58
  2. [Tomcat]Où mettre les fichiers properties dans une appli web
    Par tchouki dans le forum Tomcat et TomEE
    Réponses: 11
    Dernier message: 31/01/2006, 17h32
  3. Réponses: 2
    Dernier message: 24/01/2006, 09h41
  4. [JAR]Probleme pour inclure un jar dans une appli Web
    Par ouedmouss dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 09/12/2005, 09h40
  5. [JSP] liste de fichiers dans une appli web
    Par cyrso dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 21/01/2005, 17h17

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