Las clases de metadatos

En este post vamos a seguir profundizando en las características de RIA Services. En este caso vamos a hablar sobre las clases para los metadatos y las cosas que podemos hacer con ellas.

En los post anteriores hemos ido viendo un ejemplo de cómo crear una aplicación RIA haciendo uso de RIA Services.

En uno de los pasos, al crear el DomainService para exponer los servicios al cliente, nos salía una ventana como esta que pongo a continuación, desde la cual configurábamos la parte del modelo de datos que queremos exponer. Recordad que para crear el modelo hacíamos uso de Entity Framework.

9.1

En la parte inferior hay una opción que indica si deben generarse las clases de metadatos. En los post anteriores no habías comentado lo que hace esta opción y para qué sirve; ahora llega el momento de hacerlo.

Las clases de metadatos son clases parciales que nos va a permitir añadir más información a otros clases parciales.

En el ejemplo que estamos viendo estamos usando un modelo de datos de Entity Framework. Si viésemos el código generado al crear el modelo (podemos verlo en Northwind.Designer.cs) con nuestra entidad Suppliers, veríamos que existe una clase partial llamada Suppliers, con la definición de esta entidad.

public partial class Suppliers : global::System.Data.Objects.DataClasses.EntityObject
 
Las clases de metadatos nos va a permitir añadir más información a estas clases autogeneradas, por ejemplo, añadir un campo más que no está en el modelo o simplemente completar la información que ya existe y que no está representada en el modelo; si un campo en obligatorio, si soporta cierto rango de valores etc….Lo que hacemos es completar el modelo.
 
Esta información extra se podría hacer modificando directamente las clases del modelo, pero al ser código autogenerado habría muchas opciones de perderlo en alguna modificación, por lo que es más recomendable hacerlo en una clase diferente.
 
Seleccionando el check de “generar clases de metadatos” lo que se hace es generar automáticamente la estructura de la clases de metadatos para todas las entidades del modelo. En nuestro ejemplo, nos genera el fichero SuppliersService.metada.cs, para poder añadir información extra a la entidad Suppliers.
 
Si no hubiéramos seleccionado esta opción siempre podríamos crear estas clases posteriormente, pero si tenemos muchas entidades puede ser un poco pesado hacerlo, así que si nos lo genera mejor.
 

image

Si veis la definición de la clase de metadatos verías algo así:

[MetadataTypeAttribute(typeof(Suppliers.SuppliersMetadata))]
public partial class Suppliers

A través de los atributos podemos añadir información, por ejemplo, añadir restricciones a las propiedades de la clase; si es obligatorio, que debe cumplir una expresión regular, un determinado tamaño etc..…incluso podríamos añadir nuestro propio validador personalizado.

[Required] [RegularExpression(“[A-Z][A-Za-z0-9]*”)] [StringLength(32)] public string Name;

Y por qué es útil esto para RIA Services?

Pues porque RIA Servives es capaz de usar esta información que le suministramos y respectará y usará estas restricciones durante la validación y la generación del código cliente.

Por ejemplo, si hiciésemos una aplicación con Silverligth usando DataGrid o el FormData esta información nos será de gran utilidad.

image

image

Ibon Landa

bon Landa lleva más de 15 años dedicado al desarrollo de software. Durante este tiempo ha trabajado en diferentes empresas en las cuáles ha podido trabajar en diferentes entornos y tecnologías. Actualmente está focalizado principalmente en tareas de desarrollo, arquitectura, en las herramientas del ciclo de vida y en todo lo relacionado con la plataforma de Cloud Computing Microsoft Azure, área en el que ha sido reconocido como MVP. Participa de forma activa en la comunidad, escribiendo su blog, manteniendo un portal sobre Microsoft Azure y colaborando con Microsoft y grupos de usuarios en eventos de formación, talleres y giras de producto.

4 comentarios en “Las clases de metadatos”

  1. Hola Ibon

    A propósito del comentario del post sobre los atributos de las propiedades en clases para por ejemplo hacer validaciones, llevaba un tiempo dándole vuenltas a como poder especificar información de validacion para un campo de una BBDD que se representa en memoria como una propiedad pública de una clase, y, la verdad, es que esto que explicas se acerca mucho a lo que busco

    ¿sabes si fuera de RIA existe algo que se haya hecho para reutilizar o inspirarme?

    Gracias

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *