miércoles, 9 de septiembre de 2009

JazzRecord: Un ORM al estilo ActiveRecord para Javascript

Para el que no lo sepa, un ORM (mapeo objeto-relacional) es una técnica de programación que consiste en convertir los datos de una base de datos relacional en objetos y así poder disfrutar de las ventajas de la programación orientada a objetos.

La programación javascript cada día toma más protagonismo en aplicaciones web (no sólo en navegadores, sino también en aplicaciones de escritorio, aplicaciones móviles, etc...) y, es considerado por muchos expertos como el "lenguaje del futuro". Si vamos a programar una aplicación con javascript con almacenamiento local en forma de base de datos relacional (por ejemplo, si utilizamos Gears, Adobe Air ó HTML5) nos va a venir de perlas usar un ORM.

Entre todos los ORM javascript que he visto a día de hoy, el más completo, más sencillo de usar y más fiable que he probado es JazzRecord (no me pagan por publicidad). Su uso es muy sencillo, ya que ha tomado la esencia de ActiveRecord. Simplemente tenemos que definir los "modelos" para que JazzRecord automaticamente nos cree los métodos necesarios para crear las 4 operaciones básicas de una base de datos: insertar, leer, actualizar, borrar (CRUD).

Por ejemplo, con sólo definir:
var JazzLegend = new Model({
table: "jazz_legends",
columns: {
name: "text",
primary_instrument: "text",
years_active: "text"
}
});
Ya tendríamos creados los métodos necesarios para obtener registros (find, findBy, first, last...), insertar (create), actualizar (modificando cualquier propiedad del objeto obtenido y realizando una llamada a "save") y borrar (destroy). Así como también habríamos creado automáticamente la definición de una clase para crear objetos de tipo "jazz_legends" con los mismos atributos que campos posee la tabla.

La cosa no queda aquí, sino que podemos definir relaciones para "interconectar" las clases creadas, de la misma forma que se hace en base de datos con claves ajenas. Simplemente definiendo una relación (podemos definir relaciones uno a uno, uno a muchos y muchos a muchos) automaticamente se crean los métodos necesarios para obtener objetos relacionados. Por ejemplo, si definimos que una persona tiene coches, y que un coche es de una persona, automáticamente el objeto "persona" tiene creado un método "ObtenerCoches" que devuelve un arary de objetos "coche", y el objeto "coche" tiene un método "ObtenerDueño" que devuelve un objeto persona que se corresponde con el dueño del mismo.

Podemos definir validaciones, callbacks (eventos que se disparan cuando se produce una inserción, actualización ó borrado), realizar cualquier tipo de selecciones estableciendo los parámetros de ordenación, grupos, condiciones... incluso podemos ejecutar cualquier SQL escrita, podemos crear nuevos métodos, transacciones...

También posee las llamadas "migraciones". Es muy útil en la fase de desarrollo, ya que nos va a facilitar aplicar cambios en la estructura de la base de datos de la aplicación producidos por modificaciones realizadas.

Puedes aprender más en la página oficial, en su blog, en el grupo de google ó en futuros posts de este blog.

No hay comentarios:

Publicar un comentario