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 :

Implémentation du Pattern Singleton en C#, traduction de l'article de Jon Skeet


Sujet :

C#

  1. #1
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Points : 14 357
    Points
    14 357
    Par défaut Implémentation du Pattern Singleton en C#, traduction de l'article de Jon Skeet
    Cette discussion est destinée à recueillir vos commentaires sur l'article Implémentation du Pattern Singleton en C# (traduction de l'article Implementing the Singleton Pattern in C# de Jon Skeet)

    Le pattern singleton est un des patterns les plus connus dans le génie logiciel. Fondamentalement, un singleton est une classe qui permet une seule instance d'elle-même, et habituellement donne un accès simple à cette instance. Le plus souvent, des singletons n'autorisent aucun paramètre lors de la création de l'instance - dans le cas contraire d'une seconde demande pour une instance mais avec un paramètre différent, cela pourrait s'avérer problématique ! (Si la même instance devait être accédée par toutes les demandes avec le même paramètre, le pattern factory est plus approprié.) Cet article traite seulement le cas où aucun paramètre n'est requis. Typiquement, un critère des singletons est qu'ils sont créés en différé - c'est-à-dire que l'instance n'est créée que lors de la première fois où on en a besoin.
    Jérôme Lambert
    Développeur, Architecte, Rédacteur & Fan technologies Microsoft
    Ma boite informatique | Mon profil LinkedIn

  2. #2
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Bonjour

    Personnellement je prefere largement l'usage d'un singleton a celui d'une classe statique.

    Il a tous les avantages d'une classe statique sans les inconvénient

    J'use et abuse de la version 2 sans aucun souci
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  3. #3
    Membre confirmé

    Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2004
    Messages : 178
    Points : 645
    Points
    645
    Par défaut
    J'utilise également la solution deux. Je connaissais la méthode du double check, mais certaines contreverses en faisant un antipattern (http://fr.wikipedia.org/wiki/Double-checked_locking) , je ne l'ai jamais mis en pratique en C#, la solution deux me convenant très bien.

    Je l'ai notamment utilisé sur une couche business très sollicitée par des webservices pour améliorer les temps d'accès et réduire l'effet goulot d'étranglement dû à l'appel de plusieurs webservices sur un même manager.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    La version 2 a le mérite d'être simple et thread-safe, mais en termes de performances c'est pas génial, vu qu'il y a un lock à chaque fois qu'on veut accéder à l'instance. J'ai une préférence pour la version 4, qui est thread-safe sans avoir besoin de lock (et la version 5 s'il est important que l'implémentation soit différée).

  5. #5
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Bonjour. Contrairement à ce que l'article laissait entendre, le contenu est en fait intéressant. Par contre je trouve les considérations sur les performances totalement inutiles : dans le double-checked lock par exemple, le verrou va être exécuté une ou deux fois par type et par application. Même dans les cas les plus extrêmes (milliers de types) on resterait en-dessous d'une milliseconde au démarrage de l'appli. A mon sens c'est enseigner de mauvaises habitudes. Mais c'est là une tare de l'article original et non de la traduction. Concernant cette dernière, ma lecture n'a pas été assez attentive mais je n'ai pas relevé de coquille et le style est fluide et la ponctuation bien utilisée.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par DonQuiche Voir le message
    Par contre je trouve les considérations sur les performances totalement inutiles : dans le double-checked lock par exemple, le verrou va être exécuté une ou deux fois par type et par application.
    Il ne parle pas de problème de perf pour le double-checked lock... au contraire, c'est une solution au problème de perf du lock simple. Mais de toutes façons, cette approche est un peu risquée à mon avis, on a vite fait de se planter en l'implémentant...

  7. #7
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    J'utilise toujours le Lazy<T> comme ca, c'est Microsoft que je blâme si le singleton ne marche pas

Discussions similaires

  1. C# et beforefieldinit, traduction de l'article de Jon Skeet
    Par Jérôme Lambert dans le forum C#
    Réponses: 1
    Dernier message: 30/04/2012, 08h53
  2. Casse-têtes en C#, traduction de l'article de Jon Skeet
    Par Jean-Michel Ormes dans le forum C#
    Réponses: 7
    Dernier message: 16/04/2012, 15h29
  3. Réponses: 8
    Dernier message: 11/04/2012, 10h07
  4. Réponses: 0
    Dernier message: 31/03/2012, 16h48
  5. Réponses: 4
    Dernier message: 05/03/2012, 17h44

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