2010-08-20 3 views
2

J'ai toujours besoin d'aide. J'ai des paramètres de site Web que je veux charger en utilisant un modèle de singleton. Il y a tellement de choses négatives à propos de l'utilisation de ce modèle et tout le monde conseille d'utiliser l'Inversion de Contrôle ou l'Injection de Dépendance. Je n'ai pas encore travaillé avec IoC ou DI. Quel est le meilleur moyen de charger une fois les paramètres du site Web et de les utiliser dans l'ensemble de l'application Web? Je pensais qu'un modèle singleton serait idéal, mais je veux aller avec les meilleures pratiques. En outre, quelqu'un a-t-il des exemples de code concernant l'utilisation de l'IoC ou du DI? Quelqu'un a même mentionné que j'injecte la méthode Instance du single, mais à quoi ça sert car c'est toujours un singleton? En outre, si quelqu'un a des tests unitaires regaing ce chargement des paramètres du site avec IoC ou DI alors ce serait apprécié.La meilleure façon de charger les paramètres du site une fois?

J'utilise C#.

Merci Brendan

Répondre

1

Singleton est bien dans ce cas s'il est logique d'avoir une instance. Généralement, il ne le fait pas, et vous pouvez simplement utiliser un statique.

Une grande partie de l'inconvénient des singletons et des statiques n'existe pas s'ils sont immuables (les inconvénients liés aux effets secondaires dans l'état global). L'important ici est que conceptuellement, vous regardez les paramètres de l'application chaque fois que vous les utilisez. Faire cela à travers un singleton ou statique ajoute juste un coup de pouce de performance. Si l'immutabilité est utilisée pour rendre cela impossible à changer par la suite, alors la différence seulement entre et la recherche des réglages à chaque fois, est ce boost de performance.

Par conséquent, conceptuellement, vous n'introduisez pas d'état global, vous améliorez simplement les performances de l'état global qui existe déjà. Vous n'avez donc pas aggravé les choses.

Même certains qui sont catégoriques contre les objets globaux (que ce soit singleton ou statique) font une exception avec le flux est unidirectionnel. La journalisation globale est à sens unique car les autres classes ne l'écrivent jamais, ne lisent jamais. Les paramètres globaux sont à sens unique comme les autres classes ne les lisent jamais, n'écrivent jamais.

1

Il y a deux options, vous pouvez utiliser une simple classe statique:

public class ConfigurationBase 
{ 
    public static string Something 
    { 
     get { return ConfigurationManager.AppSettings["Something"]; } 
    } 

    // .... 
} 

Ou essayez le château Dictionnaire Adapter:

http://codebetter.com/blogs/benhall/archive/2010/07/22/improving-testability-with-the-castle-dictionary-adapter.aspx

Selon sur vos besoins. Il n'est pas nécessaire de sur-ingénierie. Gardez-le simple et lisible d'abord.

+1

Je préfère le charger une fois pour les propriétés ... et retourner la propriété ... –

+0

Oui, cela peut être amélioré, avec une vérification nulle, etc. J'aime cette approche pour les projets très simples, car elle maintient les cordes magiques contraints en un seul endroit – mathieu

Questions connexes