martes, 23 de enero de 2018

App.Config Autoreader







En nuestro día a día como desarrolladores, raro es el caso en el que no nos enfrentamos a una aplicación o a un módulo en el que tenemos que leer un fichero de configuración. Hay varias técnicas para su tratamiento, como el guardar sus datos en una clase estática, en un singletón, etc., el caso es que los valores del fichero de configuración estén accesibles en todo el proyecto. Esto no es una norma escrita, pero suele ser muy común.







Con el objetivo de hacer más liviana la lectura de los settings del fichero App.Config, hemos desarrollado una librería capaz de hacer esta tarea automáticamente, sin que tengamos que preocuparnos por ello. Su uso es muy sencillo y nos hará olvidarnos de la clase ConfiguartionManager y del ensamblado System.Configuration en muy poco tiempo.
Este desarrollo tiene un fuerte contenido de Dynamic.

App.Config Autoreader, forma parte de un proyecto Open Source llamado MoralesLarios.Development y que lo tenéis disponible en GitHub en el siguiente Link.



Índice

  1. Descripción de Autoreader
  2. Instalación y uso
  3. Ventajas e inconvenientes
  4. Tipos de transformaciones de datos
    • Valores Strings
    • Valores Numéricos
    • Valores Fecha y Fecha/Hora (Dates DateTimes)
    • Valores Booleanos
    • Tipos de Arrays
  1. Forzar a valores Strings
  2. Salvando caracteres especiales.




Descripción de Autoreader

La acción de lectura automática del fichero App.Config, consiste en primer paso de la lectura de las claves (keys) de la parte del fichero de Settings, en segundo paso de la transformación de esas claves a variables de sus respectivos tipos y de la creación una clase de resultado con el contenido de esos valores como paso final.



























Ejemplo sin definición de tipo.


















El proceso de transformación de la clave del valor del fichero de configuración a una variable fuertemente tipada.
Nuestra clase Config, es la encargada de exponer el valor fuertemente tipado mediante una propiedad de tipo Dynamic.



Instalación y uso

1.- Descargaremos el paquete de Nuget MoralesLarios.Development.





































Install-Package MoralesLarios.Development


2.- Añadiremos un nuevo Setting al fichero app.config.


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
    </startup>

  <appSettings>
    <add key="FilterDate" value="01/01/2018"/>
  </appSettings>

</configuration>


3.- Añadiremos un nuevo using a la clase consumidora.


using MoralesLarios.Development.Configuration;



4.- Crearemos una nueva variable para almacenar el valor de nuestra clave de app.config settings y llamaremos a nuestra clase  Config.ConfigNodes.[app.config_keyName].


static void Main(string[] args)
{
    DateTime filterDate = Config.ConfigNodes.FilterDate;
}













Todo el código.


using MoralesLarios.Development.Configuration;
using System;
 
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            DateTime filterDate = Config.ConfigNodes.FilterDate;
        }
    }
}


La ejecución lee una variable de tipo DateTime.
























Ventajas e inconvenientes

Estas son las ventajas e inconvenientes de la utilidad Autoreader App.Config:

PROS.
  • Lectura rápida
  • Transformación rápida
  • Fácil uso y comprensión del proceso
  • Añades una nueva clave en el settings del fichero app.config y ya la tienes disponible para usar en código.

CONS.
  • Los valores de las claves están expuestos en valores de tipo Dynamic por lo que se pierde el intellisense.



Tipos de transformación de Autoreader

La utilidad Autoreader puede transformar los valores a los siguientes tipos:

  • Stirngs
  • Numerics
  • Dates and DateTimes
  • Bools
  • Array of
    • Strings Arrays
    • Numerics Arrays
    • DateTimes Arrays
    • Bools Arrays



Ahora explicaremos más en profundidad cada uno de ellos.



Valores Strings

Es el proceso más simple de transformación ya que los valores de las claves del fichero app.config ya son de tipo string, así que simplemente pasa su contenido.











Valores Numéricos

El proceso para los valores numéricos, es muy similar al de los tipos strings, con la diferencia que para los tipos numéricos el valor leído de la clave se castea a el tipo decimal.

Hemos decidido escoger el tipo decimal, ya que este cumple todas las necesidades de los tipos numéricos en general (short, int, double, etc).










Valores Date and DateTime

En esta ocasión, el valor string de las claves de fichero App.Config serán transformadas a una variable de tipo string.


DATE












DATETIME












Valores Booleanos

Igual que en los casos anteriores, pero para tipo bool.












Arrays values

El proceso de transformación para collecciones (Arrays), es muy similiar al de los tipos simples. La lectura inicial será igual, pero el proceso verificará que el contenido de la clave posea caracteres con el valor ‘;’ (punto y coma), esto le servirá como separador de valores y partirá en trozos su volumen.

Esta regla es válida para todos los tipos de arrays.  











Este es el resultado:












Forzar valores a tipo String

En caso puede sernos de gran ayuda el poder forzar la lectura de valores a tipo string, deshabilitando su transformación a tipos fuertemente tipados. Podríamos tener la necesidad de leer valores de tipo (numérico, fechas o booleanos) como valores de tipo cadena.
Para este caso utilizaremos ‘’ (comilla simple) al comienzo y al fin del valor de la clave, para forzar a un valor string.











Valor de la variable.























Salvando caracteres especiales

Si queremos leer valores de caracteres especiales del fichero de configuración ( ; o ‘’),  y que estos pierdan sus capacidades extraordinarias y simplemente sean un valor más de la cadena de caracteres, tendremos que usar  ‘\’ (backslash) precediendo al carácter que deseamos despojar sus poderes.











Ejemplo:





























No hay comentarios :

Publicar un comentario