jueves, 4 de junio de 2009

Utilizando metadata para describir las clases en Flex


Si nos vamos a la definicion de wikipedia la metadata no es mas que información "sobre la data", es decir, es describir como es la data. Una metadata esta compuesta de una serie de metatags, donde cada uno de estos ultimos se encarga de describir alguna caracteristica de la clase. En un metadato podemos decile al flex que tipos de datos debe contener un ArrayCollection, si una imagen se debe cargar dentro de la pelicula SWF o cargarla remotamente al momento de ejecutar la pelicula, cuales son los posibles valores que puede tomar una propiedad, etc. Supongamos, en el siguiente ejemplo, que tenemos la clase "Carrito" que viene definida de la siguiente manera:


package
{
import mx.collections.ArrayCollection;

public class Carrito
{
public var id : String;
public var estado : String;
public var productos : ArrayCollection;

public function get total() : int
{
return productos.length;
}
}
}

Esta clase no tiene ningun tipo de "Metatag"y lo unico que conocemos de ella es que tiene tres atributos, sus tipos y sus nombres. Ahora supongamos que queremos utilizar este objeto como un "objeto remoto" para utilizarlo en algun lenguaje del lado del servidor como java, php, c#, etc. Para eso debemos decirle al compilador que este objeto esta representado del lado de java y que debe conservar la informacion de la clase al momento de serializar, para eso utilizamos el metatag [RemoteClass]. Tambien debemos decirle entonces que la propiedad "total" no debe ser enviada al servidor por tratarse de una propiedad calculada (seria como por ejemplo la edad, al pasar la fecha de nacimiento se puede calcular la edad), para excluir propiedades de ser enviadas para el servidor utilizamos el metatag [Transient]. Ahora supongamos que queremos definir que el estado de el carrito solo puede ser o "pagado" o "sin pagar", para eso debemos utilizar el metatag [Inspectable] y definir dentro de el los dos valores que puede tomar ese atributo. Con estas tres definiciones la clase nos quedaría de la siguiente manera:

package
{
import mx.collections.ArrayCollection;

[RemoteClass(alias="com.CctVO")]
public class Carrito
{
public var id : String;

[Inspectable(defaultValue="sin pagar",enumeration="sin pagar,pagado")]
public var estado : String;

public var productos : ArrayCollection;

[Transient]
public function get total() : int
{
return productos.length;
}
}
}

Este es un gran ejemplo de metadatos que podemos utilizar en flex. Si quieres conocer mas sobre los metadatos de flex te invito a entrar e mi articulo "Listado de metatags y sus utilidades en flex" donde explico de manera mucho más detallada todas las posibles descripciones que podemos realizarle a una clase al momento de programarla. Cualquier pregunta no duden en escribirla en los comentarios de este articulo.

2 comentarios:

  1. hola alejnadro ... novedoso el tema de flex baje un manual y empece a estudiar, despues de unos par de ejercicios quede con algunas dudas, como, como definir una propiedad en flex lo cual me arrojo ese error en el programa que estaba haciendo lo cual no pude seguir adelante si tiene alguna idea de esto postealo ...
    el error que me tiraba decia acceso a una propiedad tanto tanto no definida ... la pregunta como definir la propiedad ...
    rmte:Yerko Bonacic-Doric leon.

    ResponderEliminar
  2. Hola, estoy buscando la manera de poder crear mi prpio tag para flex, alguien sabe de alguna manera, por que no encuentro...

    ResponderEliminar