Deployments, web.config’s y archivos de settings.

Quien no se han encontrado con web.config’s que contienen una cantidad de appSettings que es inmanejable. Supongo que más o menos todos, ya que si no se tiene cuidado, estas appSettings pueden crecer de manera desmesurada complicando mucho los deployments y sobre todo haciendo que las susodichas settings pierdan su efectividad ya que se puede dar el caso de no saber para que se usa cada una (sobre todo si el proyecto lo tienes en producción desde hace n años).

El nodo appSettings, es muy útil ya que nos permite modificar valores que afectan al comportamiento de nuestra aplicación de una forma rápida y efectiva (y sin ser necesario compilar), pero estas como todo, hay que mantenerlas y sobre todo organizarlas.

Con asp.net 2.0, se introdujeron unos nuevos ficheros que nos permitían manejar la configuración de nuestra aplicación de una forma mucho más ordenada y efectiva.

Estos ficheros, eran los ficheros de settings, por medio de ellos, vamos a poder almacenar app settings y acceder a ellas de una forma enumerada. Además cuando creamos un fichero de settings, se genera una clase que nos va a serializar y deserializar de una forma automática y optima el acceso a nuestras settings.

Para crear un fichero de settings, puedes hacerlo de dos formas:

  • Btn derecho en nuestro proyecto -> Add ítem -> settings file  (en class libraries)
  • Btn derecho en nuestro proyecto -> properties -> settings (en proyectos web)

Una vez que tenemos el archivo creado, ya solo nos queda añadir nuestras settings, el tipo de dato que va a almacenar, el scope (user o application) y por último el valor que almacenan.

Estas settings, al igual que las appSettings, se almacenan en nuestro web.config o app.config, de esta forma, también las podemos modificar sin tener que volver a compilar nuestro proyecto.

Veamos un ejemplo, supongamos que trabajamos con las appSettings, yo defino n appSettings en mi proyecto, y para usarlas debería hacer algo por el estilo a esto:
private const string NUMBER_OF_ITEMS = "NumberOfItems";
public int NumberOfItems
{
get{ return Convert.ToInt32(WebConfigurationManager.AppSettings[NUMBER_OF_ITEMS]); }
}

Si utilizamos un archivo de settings, únicamente tendríamos que hacer lo siguiente:

Settings.DisplaySettings.Default.NumberOfITems;

Siendo Settings el namespace y UrlSettings, la clase que se va a generar para poder encapsular el acceso a la susodichas settings.
Si esto ya os ha gustado (que seguro que sí), lo mejor viene ahora, si trabajamos con nuestro nodo de appSettings, las settings las tenemos que definir más o menos de la siguiente forma:

<appSettings>
<add key="NumberOfItems" value="20"/>
<add key="DefaultOrderValue" value="DefaultOrderValue"/>
</appSettings>

Mientras que si trabajamos con este tipo de ficheros y aunque igualmente se almacenan en el web.config, se almacenan de la siguiente forma:

<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="TestSettings.Settings.AppGlobalSettings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<applicationSettings>
<
TestSettings.Settings.AppGlobalSettings>
<setting name="DefaultOrderValue" serializeAs="String">
<value>date</value>
</setting>
</TestSettings.Settings.AppGlobalSettings>
</applicationSettings>

Como podéis ver mucho más ordenado y eficiente.

Como apunte deciros que la buena práctica recomienda el incluir estas settings y nodos en nuestro web.config o app.config principal, pero si no lo hacéis, esta clase que se autogenera al no encontrar el valor buscado, usa el valor que se le dio cuando se precompiló. Que esto sea una ventaja o inconveniente lo tiene que decidir cada uno, el hecho es que el asunto funciona así.

Recientemente, hemos realizado una aplicación iPhone (disponible gratis en appstore) para Nomaders.com. Esta app explota las API’s de varias redes sociales (11870.com, Restaurantes.com, NVivo y MiNube).

Cada una de las piezas que encapsula el acceso a esas API’s, las ha desarrollado vuestro querido y humilde narrador y para el tema de las configuraciones he usado este tipo de archivos y os aseguro que se trabaja de una forma muy sencilla y además a la hora del deployment, todo queda mucho más ordenado siendo así más fácil de mantener y administrar.

Os dejo chavales, que he quedado para enseñarles a mis colegas mi carro nuevo así que nada más, mientras he escrito este post, he estado escuchando a Sidonie, porque me recuerdan a ti y pq aunque hayan pasado ya casi dos años, cada día me tienes más fascinado.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s