Estás leyendo:
Informática, técnica

Un vistazo a linqToXsd


Bueno, para los que no esteis muy al tanto de esta tecnología de .NET, linq es un conjunto de tecnologías para el acceso a datos capaz de serializar tipos a fuentes de datos diversas, y deserializar en forma de tipos accesibles por el analizador sintáctico del lenguaje en cuestión (C# por ejemplo).

Esto es algo verdaderamente glorioso, pues mediente unas reglas sintácticas muy sencillas podemos acceder a los datos ya tipados y también serializarlos -almacenarlos de forma permanente- de manera tal que los errores de acceso a datos van a surgir,😄, en tiempo de diseño -en la compilación- y no en tiempo de ejecución, cuando ya no podemos cazarlos.

linqToXsd es una librería más de este conjunto que utiliza un archivo xml como origen de datos, pero que a diferencia de linqToXml, es capaz de utilizar un esquema de definición de datos asociado en forma de archivo xsd para generar internamente un conjunto de tipos que son añadidos automatizadamente a la blblioteca de tipos del proyecto y pueden ser manipulados en tiempo de diseño.

Las ventajas son evidentes: es posible entonces extraer listas de objetos directamente tan solo mediante una expresion lambda y un casting al tipo adecuado que ha sido generado desde el xsd. Casi ná…

Ejemplo:

Un usuario experto se plantea la necesidad de ejecutar muchas veces un grupo relativamente reducido de operaciones sobre un banco de imágenes: cambiar su título, su descripción, adscribirlas a categorías diferentes, eliminarlas…

Dado que por sus conocimientos controla Excel con un mínimo de dignidad, era posible la solución que se le propuso, que no fué otra que generar una hoja con datos tabulados en 3 columnas : identificador de la imagen, operación y valor, que queda en el sistema definiendo una interfaz común

public interface OperacionesConImagenes
{
void Do(ushort? idImagen, string valor);
}

y el cjto de operaciones como clases que la implementan

La parte más chula de todo esto es que tan sólo hay que convertir la hoja a XML y extraer la plantilla correspondiente:

<?xml version=”1.0″ encoding=”utf-8″?>
<xs:schema attributeFormDefault=”unqualified” elementFormDefault=”qualified” xmlns:xs=”http://www.w3.org/2001/XMLSchema”&gt;
<xs:element name=”ListaDeTareas”>
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs=”unbounded” name=”Tarea”>
<xs:complexType>
<xs:sequence>
<xs:element name=”Orden” type=”xs:unsignedShort” />
<xs:element minOccurs=”0″ name=”pg” type=”xs:unsignedByte” />
<xs:element minOccurs=”0″ name=”Id” type=”xs:unsignedShort” />
<xs:element minOccurs=”0″ name=”Nombre” type=”xs:string” />
<xs:element name=”Operacion” type=”xs:string” />
<xs:element minOccurs=”0″ name=”Valor” type=”xs:string” />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

la cual es utilizada por la librería para generar unos tipos en la biblioteca de objetos: el tipo ListaDeTareas y el tipo Tarea, siendo el primero una lista de objetos del segundo tipo. Para ello hay que aplicar el valor LinqToXSDSchema a la propiedad BuildAction del objeto xsd que hemos integrado en la solución.

Y así, desde el xml se pudo almacenar una lista de tareas en forma de tuplas Tareas que fueron ejecutadas. La forma de obtener la operación a aplicar con un parámetro de entrada de tipo string fué así:

OperacionesConImagenes opAplicar = Activator.CreateInstance(Type.GetType(“OperacionesEnBatch.Op” + Enum.GetName(typeof(TiposOperacionesConImagenes), operacion))) as OperacionesConImagenes;

opAplicar.Do(idImagen, valorOperacion);
Mola, eh?

Para saber más sobre el tema…

Discussion

No comments yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Lo leyeron y comentaron

Top Clicks

  • None

Flickr Photos







More Photos
%d bloggers like this: