viernes, 1 de febrero de 2008

AS2, Clase administradora de versiones

Hace poco he creado una sencilla clase que me ayuda en la administración de las versiones de mis otras clases o archivos .fla.

Cuando se trabaja en proyectos grandes, con varias personas en el equipo y con mucho movimiento en algunas ocasiones sería bueno saber que versión de la aplicación está corriendo en el servidor.
Con esta sencilla clase se registra cada clase en el contructor (o donde quiera) y esta se agrega en una lista de clases y versiones. Cuando se desea ver el reporte de versiones se llama una función que le devuelve el reporte de versiones.

Veamos un ejemplo...

import com.npi.debug.Version;

class Test1{
public function Test1() {
Version.log("1", This);
}

public function toString():String {
return "TEST1";
}
}


Como ven con una simple línea de código se guarda la versión de la clase (en este caso Test1).
También se puede notar que la clase Version es estática, de hecho usa un patón de diseño llamado Singleton.

Veamos las funciones publicas de nuestra clase Version...


public static function getInstance():Version
Devuelve una instancia de la clase Version. Usado por el patrón Singleton.

Ejemplo:
var oVersion:Version = Version.getInstance();


public static function log(sVersion:String, oClass:Object):Void
Agrega una clase u objeto a la lista de versiones.
Esta es una forma corta de agregar clases internamente llama a otra función llamada "add" que veremos más adelante.

Tiene 2 argumentos:
* sVersion:String que es el número de la versión.

* oClass:Object que es la clase a versionar.
Si la clase tiene una función toString se puede usar this o la referencia a dicha clase, también puede escribir el nombre directamente.

Ejemplos:
Version.log("1b", This);
Version.log("8.3 RC 4", "GAME FLA");
Version.log("1.5.2", "GAME");



public function add(sVersion:String, sClassName:String):Void
Igual que la anterior, agrega una clase u objeto a la lista de versiones.
La diferencia está en el argumento sClassName que es un String no un Object y en la forma en que se llama al no ser estática y usar el patrón Singleton (eso la hace levemente más rápida).

Ejemplos:
Version.getInstance().add("1b", This.toString());
Version.getInstance().addg("8.3 RC 4", "GAME FLA");
Version.getInstance().add("1.5.2", "GAME");



public function getVersions():String
Retorna un reporte de las versiones. Usa el patrón Singletón.
Dice el número de clases registradas y las organiza alfabéticamente.

Ejemplo:
Trace("Traza...");
Trace(Version.getInstance().getVersions());

Traza...
REPORTE DE VERSIONES (3)
* GAME v1.5.2
* GAME FLA v8.3 RC 4
* TEST1 v1b



Tip. Se puede trazar el reporte al presionar ciertas teclas (puede ser CTRL + 7).

var myListener:Object = new Object();
myListener.onKeyDown = function() {
if (Key.isDown(Key.CONTROL) && Key.getCode() == 55) {
trace(Version.getInstance().getVersions());
}
};
Key.addListener(myListener);


Version.as


Quedo en espera de comentarios, dudas o correcciones.

No hay comentarios: