J'ai plusieurs constantes que mon programme utilise. Certains sont string
s, d'autres int
s et d'autres double
s. Quelle est la meilleure façon de les stocker? Je ne pense pas que je veux un Enum, parce que les données ne sont pas toutes du même type, et je veux définir manuellement chaque valeur. Devrais-je simplement les ranger dans une classe vide ou y a-t-il une meilleure solution?
Réponses
Trop de publicités?L'OMI à l'aide d'une classe pleine de constantes est très bien pour les constantes. Si ils vont changer de semi-parfois je recommande d'utiliser AppSettings dans votre config et la classe ConfigurationManager à la place.
Edit: Quand j'ai des "constantes" qui sont en fait tirés à partir AppSettings ou similaire, je vais toujours avoir une "constantes" de la classe qui encapsule la lecture à partir du gestionnaire de configuration. C'est toujours plus utile d'avoir Constants.SomeModule.Setting
au lieu d'avoir à recourir directement à ConfigurationManager.AppSettings["SomeModule/Setting"]
sur toute la place qui veut consommer de ladite valeur de réglage.
Les points de Bonus pour cette installation, depuis SomeModule
serait susceptible d'être une classe imbriquée à l'intérieur du fichier de Constantes, vous pouvez facilement utiliser l'Injection de Dépendance à injecter soit SomeModule
directement dans les classes qui en dépendent. Vous pouvez aussi même extraire d'une interface sur le dessus de l' SomeModule
, puis de créer un depenedency d' ISomeModuleConfiguration
de votre consommation de code, cela vous permettra ensuite de dissocier la dépendance à l'une des Constantes des fichiers, et même potentiellement rendre le test plus facile, surtout si ces paramètres viennent de AppSettings et de les modifier à l'aide de config transformations, car les paramètres sont spécifiques à un environnement.
Premièrement, si vos constantes doivent être utilisées à partir de plusieurs assemblys, utilisez les variables static readonly
. S'ils ne sont utilisés que dans votre assemblée, continuez avec const
.
Ce que j'aime faire est le suivant:
internal static class ColumnKeys
{
internal const string Date = "Date";
internal const string Value = "Value";
...
}
Une classe statique vide est appropriée. Pensez à utiliser plusieurs classes afin de vous retrouver avec de bons groupes de constantes connexes, et non pas un seul fichier Globals.cs géant.
De plus, pour certaines constantes int, considérons la notation:
[Flags]
enum Foo
{
}
Comme cela permet de traiter les valeurs comme des drapeaux .