2010-12-13 29 views
3

Je travaille actuellement sur l'application ASP.NET MVC. Je prévois de créer une classe statique dans laquelle je prévois de conserver toutes les constantes de chaînes globales comme les noms de session. La raison pour laquelle je suis hésitant, c'est parce que c'est une sorte d'odeur, mais je ne suis pas au courant d'une meilleure alternative.Constantes globales dans un fichier séparé. Est-ce que c'est une bonne idée?

S'il vous plaît montrez-moi la lumière comment définir des constantes globales. Une autre solution consisterait à créer un fichier de ressources (.resx).

+0

Pour ce qui vaut la peine, ça ne sent pas mauvais pour moi. –

Répondre

4

vadim,

-je faire exactement comme vous le proposez et d'utiliser à cet effet une classe statique. Vous obtenez alors l'avantage d'accesseurs fortement typés PLUS la possibilité d'ajouter des substitutions (sous la forme de méthodes), si vous en avez besoin.

est ici un extrait:

public static class Config 
{ 
    private const string NotSet = "**VALUE NOT SET**"; 
    private const int pageSize = 5; 

    public static string CustomCache 
    { 
     get 
     { 
      return ConfigurationManager.AppSettings["CustomCache"] ?? NotSet; 
     } 
    } 

    public static int PageSize 
    { 
     get 
     { 
      // simple default - no setter 
      return pageSize; 
     } 
    } 
} 

utilisation typique:

items = _repository.GetPaged(pageNumber, Config.PageSize) 

dans la classe ci-dessus, certains paramètres sont appelés « 2ème génération » des paramètres de l'application dans le web.config, mais avec une forte taper dans les classes pour assurer la vérification des erreurs d'exécution, etc. Les autres sont des paramètres purement statiques définis dans la classe.

c'est la flexibilité de faire tout ce qui précède (à mon avis) donne à cette approche à la fois un attrait et une réelle force.

+0

Pour autant que je vois, CustomCache récupère les valeurs de web.config et s'il n'y a pas de config, renvoie la valeur NotSet décrite dans la classe. En plus de cela, les autres valeurs constantes peuvent être affectées ici et utilisées directement en tant que propriété PageSize. Tout cela est vrai? –

+0

correct - vous pouvez bien sûr affecter des constantes de chaînes publiques et tirer parti d'une saisie forte sur celles-ci. Je n'arrive pas à croire que cette réponse était d'almsot 5 ans - où est-ce que tout cela va :) –

+0

:) Bien. J'ai un problème similaire sur http://stackoverflow.com/questions/30255539/using-constant-for-defining-property-format-in-mvc/30255752?noredirect=1#comment48615812_30255752 et autant que je vois dans les réponses , Je ne suis pas sûr si l'approche ci-dessus est adaptée à mon besoin, c'est-à-dire l'exécution, le statut de compilation. Pourriez-vous vérifier ma question s'il vous plaît? D'un autre côté, je peux aussi penser à utiliser readonly au lieu de constant si c'est beaucoup plus approprié pour moi. Pourriez-vous me préciser s'il vous plaît? (Vous pouvez poster votre code sur cette page). Merci... –

1

Ou si ce sont des valeurs configurables, ils peuvent aller dans web.config ou dans une table de configuration de base de données.

0

Vous pouvez utiliser le fichier global.asax à cette fin - j'utiliserais des accesseurs pour eux, par exemple.

private static int var ; 

public static int VAR 
{ 
    get { return var ; } 
} 
+1

Je ne vois pas de grande différence entre mettre des constantes dans global.asax ou dans une autre classe. Pouvez-vous me dire s'il y a un avantage à mettre des constantes dans global.asax? – Vadim

+1

Si vous postez du code ou du code XML, ** s'il vous plaît ** surlignez ces lignes dans l'éditeur de texte et cliquez sur le bouton "code" (101 010) dans la barre d'outils de l'éditeur pour le mettre en valeur! –

0

Que ce soit MVC ou formulaires Web, j'utilise une combinaison d'entrées de la base de données (pour les paramètres du site qui peuvent être modifiés par le tableau de bord) et web.config appsettings (pour les paramètres du site qui ne changent pas souvent ou , c'est-à-dire constante).

+0

Dans mon cas, je ne m'attends pas à ce que la valeur des constantes soit modifiée. Je ne vois pas une grande différence entre appSettings ou une classe statique séparée. Faites-moi savoir s'il me manque quelque chose. – Vadim