Porque no sólo de webs vive Flash… Papervision3D, primeros pasos (2): BasicView
jul 15

Esta clase es un simple controlador de caché. Un array que almacena datos cargados. Si nuestra aplicación carga datos bajo demanda, por ejemplo de una base de datos, tal vez queramos almacenar los datos en una caché interna, de manera que solo hará falta una petición al servidor para mostrar el mismo dato o consulta.

Ejemplo:

Tenemos un catálogo de productos, el usuario pincha un botón del producto con “id=x”
Hacemos una consulta a la base de datos que nos devuelve todos los datos de ese producto, que parseamos creando un objeto.
El usuario continua navegando por otros contenidos. Acto seguido vuelve a reclamar el producto mostrado anteriormente. ¿Por qué volver a hacer la petición al servidor si previamente podíamos almecenar esa información?

Pues esa situación es la que resuelve esta clase.
Admite cualquier tipo de datos.

La podéis descargar aquí: CacheManager.as
Deberéis descargar también esta clase de la que depende CacheManager: ArrayUtils.as

Testeando la clase:

var cache:CacheManager = new CacheManager("Id");
trace("cache test =====================");
var obj1:Object = new Object();
obj1.Id = 24
 
var obj2:Object = new Object();
obj2.Id = 36;
 
trace(cache.Add(obj1)); // true (no existia en caché)
trace(cache.Add(obj2)); // true (no existia en caché)
trace("ejemplo de GetData:", cache.GetData(36));
trace(cache.Add(obj2)); // false (ya existia en caché)
trace(cache.Remove(obj2)); // true (existia en caché y se eliminó)
trace(cache.Remove(obj2)); // false (no existia en caché y se pudo eliminar)
cache.TraceData();
trace("cache test =====================");

Ejemplo de uso:

package
{
	import net.xinterface.managers.CacheManager;
 
	public class CacheManagerExample
	{
		private var cache:CacheManager;
 
		public function CacheManagerExample()
		{
			// "ref" es la propiedad "ref" de cada objeto almacenado en la caché.
			// es obligatoria y sirve para poder identificar los elementos almacenados
			cache = new CacheManager("ref");
		}
 
		public function SetProduct(productRef:Number):void
		{
			// antes de mostrar un producto comprobamos si ya estaba almacenado en caché
			if(cache.GetData(productRef) != null)
			{
				trace("ya estaba en cache, lo mostramos");
				ShowProduct(cache.GetData(productRef));
 
			}else
			{
				trace("no estaba en cache, consultamos la base de datos");
				DBQuery(productRef);
			}
		}
 
		private function DBQuery(productRef:Number):void
		{
			var prod:Object = new Object;
			prod.ref = productRef;
			// comunicación con el server para recuperar los datos del producto
			// prod.precio = x;
			// prod.localizacion = x;
			// prod.loquesea = x;
 
			// Añadimos el producto a la caché:
			cache.Add(prod);
			ShowProduct(prod);
		}
		public function ShowProduct(product:Object):void
		{
			// acciones para mostrar el producto...
		}
	}
}

Comments are closed.