Tengo varias constantes que mi programa usa ... string
's, int
' s, double
's, etc ... ¿Cuál es la mejor manera de almacenarlas? No creo que quiera una Enum
, porque los datos no son todos del mismo tipo y quiero establecer manualmente cada valor. ¿Debería guardarlos todos en una clase vacía? ¿O hay un mejor camino?
97
Respuestas:
Probablemente podría tenerlos en una clase estática, con propiedades estáticas de solo lectura.
fuente
En mi opinión, el uso de una clase llena de constantes está bien para las constantes. Si cambian de vez en cuando, recomiendo usar AppSettings en su configuración y la clase ConfigurationManager en su lugar.
Cuando tengo "constantes" que en realidad son extraídas de AppSettings o similar, siempre tendré una clase de "constantes" que envuelve la lectura del administrador de configuración. Siempre es más significativo tener en
Constants.SomeModule.Setting
lugar de tener que recurrir directamente aConfigurationManager.AppSettings["SomeModule/Setting"]
cualquier lugar que quiera consumir dicho valor de configuración.Puntos de bonificación para esta configuración, dado
SomeModule
que probablemente sería una clase anidada dentro del archivo Constants, podría usar fácilmente Dependency Injection para inyectarSomeModule
directamente en las clases que dependen de ella. También puede extraer una interfaz encimaSomeModule
y luego crear una dependenciaISomeModuleConfiguration
en su código de consumo, esto le permitiría desacoplar la dependencia a los archivos Constants e incluso potencialmente facilitar las pruebas, especialmente si estas configuraciones provienen de AppSettings y los cambia usando transformaciones de configuración porque la configuración es específica del entorno.fuente
Lo que me gusta hacer es lo siguiente (pero asegúrese de leer hasta el final para usar el tipo adecuado de constantes ):
Lea esto para saber por qué
const
podría no ser lo que desea. Los posibles tipos de constantes son:const
campos. No lo use entre ensamblados (public
oprotected
) si el valor puede cambiar en el futuro porque el valor estará codificado en tiempo de compilación en esos otros ensamblados. Si cambia el valor, los otros ensamblados usarán el valor anterior hasta que se vuelvan a compilar.static readonly
camposstatic
propiedad sinset
fuente
Esta es la mejor manera en mi opinión. Sin necesidad de propiedades, o solo lectura:
fuente
Una clase estática vacía es apropiada. Considere el uso de varias clases, de modo que termine con buenos grupos de constantes relacionadas, y no un archivo Globals.cs gigante.
Además, para algunas constantes int, considere la notación:
Ya que esto permite tratar los valores como banderas .
fuente
Otro voto para usar web.config o app.config. Los archivos de configuración son un buen lugar para constantes como cadenas de conexión, etc. Prefiero no tener que mirar la fuente para ver o modificar este tipo de cosas. Una clase estática que lee estas constantes de un archivo .config podría ser un buen compromiso, ya que permitirá que su aplicación acceda a estos recursos como si estuvieran definidos en el código, pero aún le brinda la flexibilidad de tenerlos en un formato fácilmente visible / editable. espacio.
fuente
Sí, una
static class
para almacenar constantes estaría bien, excepto para las constantes que están relacionadas con tipos específicos.fuente
Si estas constantes son referencias de servicio o conmutadores que afectan el comportamiento de la aplicación, las configuraría como configuración de usuario de la aplicación. De esa manera, si es necesario cambiarlos, no es necesario volver a compilarlos y aún puede hacer referencia a ellos a través de la clase de propiedades estáticas.
fuente
Sugeriría una clase estática con solo lectura estática. Encuentre el fragmento de código a continuación:
fuente