lunes, 1 de octubre de 2007

Herramientas ORM

En este artículo de mi blog quiero hacerles un resumen sobre algunas herramientas que nos ayudarán a la hora de crear una capa de acceso a datos para nuestras aplicaciones en .Net.

Existen distintas formas de creación de una capa de acceso a datos: se puede crear una clase "broker" siguiendo el patrón agente de BD que actúe como único punto de acceso a nuestra BD, sin embargo, esta forma de actuar suele ser válida unicamente para aplicaciones "simples". Si queremos trabajar de una forma profesional debemos adoptar algunas de las propuestas siguientes:

Una forma es crear una clase por cada tabla en la base de datos y mapearlas una a una. Esta es la forma más sencilla y es muy válida cuando tenemos una estructura de base de datos que sea muy parecida a nuestro modelo de dominio (que no se haya optimizado con particiones horizontales o uniones).

Otra forma es respetar un modelo orientado a objetos que represente los objetos del dominio del negocio. Esta es una forma más correcta de trabajar pero se hace más complejo mapear esas clases a sus tablas correspondientes.

Para realizar esta tarea existen herramientas que se llaman ORM (Object to Relational Mapper).

Un ORM muy popular es el NHibernate, se trata de una portación al .net del Hibernate de Java. Este framework se encarga de persistir nuestros objetos del negocio, también tiene un lenguaje de consultas orientado a objetos propio y es totalmente independiente de la base de datos que usemos. Y lo bueno que tiene esto es que podemos migrar de una base de datos a otra sin tocar nuestro código (simplemente cambiamos un par de cositas en un archivo de configuración). Eso sí, hay un trabajito extra, tenemos que crear archivos de configuración xml que le van a indicar a NHibernate cómo tiene que mapear cada clase a sus respectivas tablas.

NHibernate es el framework de persistencia más completo que existe en el mercado. Soporta todos los tipos de relaciones (uno a uno, uno a muchos, muchos a muchos) y puede mapear varias tablas a una clase o al revés, también permite usar herencia, transacciones, agregaciones y muchas cosas más, practicamente podemos hacer cualquier cosa que se nos ocurra. Si buscan una herramienta que les permita crecer y hacer modificaciones sin que surgan limitaciones que no se tuvieron en cuenta, la mejor opción es NHibernate.

Si los archivos de configuración de NH les parecen muy complicados, existen muchas herramientas para facilitarnos las cosas. Una que yo he probado y que me fue muy satisfactoria fue MyGeneration, este es un generador de código opensource que dispone de varias plantillas para generar las clases de acceso a datos y los archivos de configuración de NHibernate a partir de la estructura de nuestra base de datos.

Existe otro proyecto muy interesante: CastleProject (de Brasil) que se trata de un conjunto de frameworks para implementar patrones de diseño com MVC, Inversion Of Control y ActiveRecord. El framework ActiveRecord de CastleProject nos permite implementar este patrón de diseño para el acceso a datos empleando en un nivel inferior a NHibernate por lo que estaríamos usando NHibernate para la persistencia pero encapsulado en el patrón ActiveRecord y también nos olvidamos de los archivos de configuración XML ya que con este nuevo framework sólo tenemos que poner decoradores en nuestras clases (si los nombres de las propiedades se corresponden con las columnas ni siquiera es necesario usar decoradores). Con esta herramienta se simplifica mucho usar NHibernate para la persistencia.
Si volvemos al generador de código que nombre antes (MyGeneration), el mismo creador nos brinda su propio framework de persistencia: dOOdads, para trabajar con este framawork necesitamos el MyGeneration para generar todas nuestras clases y los stored procedures para los inserts, updates y deletes. Esta herramienta genera código muy legible y con una forma muy fácil de realizar consultas.

Saludos.

No hay comentarios: