miércoles, 18 de febrero de 2009

Cantidad de Visitas al Articulo:

NHibernate – Tips Útiles para el Desarrollo Efectivo

BDDesde hace ya tiempo utilizo como framework de base de datos Hibernate o NHibernate. Si bien Hibernate ha tenido un desarrollo constante, NHibernate, además de aparecer posteriormente, no ha tenido el empuje de su “hermano mayor”.

De todas formas, la experiencia que he tenido con NHibernate es mas que buena hasta el momento, y seguiré usándolo, debido a que permite a los desarrolladores de productos como yo, una gran flexibilidad a la hora de vender sus productos.

Un tema que en Hibernate ya estaba solucionado desde hace buen tiempo, que era la generación automática de las clases y los archivos de mapeo tomando como base las tablas desde la base de datos en cuestión, en NHibernate no estaba tan desarrollado. Hoy, buceando en  internet encontré una herramienta mas que interesante, que no solo genera los mapeos y class para NHibernate, sino para varios templates mas. 

En este artículo haré algunas referencias rápidas para temas importantes en el uso de NHibernate, y posteriormente desarrollaré una introducción a la herramienta mencionada, debido a que permite una forma rápida y consistente de adelantar trabajo, por demás tedioso si se lo intenta manual.

NHibernate – Que és y qué ventaja tiene?

NHibernate, es un framework de O/RM (Object/Relational Mapping), un port de Hibernate de Java, que tiene como función principal mapear los objetos desde una aplicación .Net a una base de datos Relacional.

La ventaja fundamental, es que el programador se abstrae de la base de datos con la que está trabajando, y solo trabaja a nivel de clases C#.NET o VB.NET, y NHibernate se preocupa de hacer los mapeos entre las propiedades y las columnas de la base de datos, generando dinámicamente las sentencias SQL para interactuar con la base de datos, según sea la base definida en el archivo de configuración.

NHibernate – Algunas Características

BD_Bullet Bases de Datos Soportadas
Están soportadas una lista bastante amplia entre las que se encuentran las bases de datos mas utilizadas a nivel de mercado, tales como Oracle, SQL Server, MySQL, etc.
BD_Bullet

Relaciones
Es factible modelar relaciones de 1:1 o 1:N, asociando en las clases propiedades que contienen una lista de objetos (filas) de otro tipo de entidad (tabla) definida. Es importante definir correctamente, como NHibernate debe cargar la entidad cuando tiene relaciones de 1:N, dado que esto puede significar problemas graves de performance. Lo ideal es configurarlo para que solo se carguen las listas cuando realmente se necesitan. Verificar el atributo Lazy.

BD_Bullet

Performance
Dependiendo del modelo claro está, pero en general he conseguido muy buena performance en los accesos a base de datos, probando especialmente con Oracle, SQL Server 2000/2005, MySQL, Sybase y Postgress. En caso de necesitar hacer alguna consulta muy complicada a la base de datos, NHibernate permite generarla a través de código SQL directo, evitando tiempos adicionales innecesarios.

NHibernate – Herramientas de Apoyo

Una de las tareas mas engorrosas es la generación de los archivos de mapeo, que relacionan los nombres de las propiedades en una clase, y las columnas de la base de datos. Esto se genera en XML que debe ser compilado como Embebed Resource en un proyecto .NET.

Una opción es hacerlo manualmente, generando el XML necesario y detallando cada propiedad. 

Otra opción, por demás mas productiva, es utilizar herramientas como MyGeneration, con la cual configurando la conexión a la base de datos que con la que deseamos trabajar, y descargando una plantilla de NHibernate de las varias que existen, es factible generar, al mismo tiempo, una clase por cada tabla de la base de datos seleccionada, junto con el archivo de mapeo XML asociado, incluyendo relaciones, claves y hasta vistas.

MyGeneration

Desde la ventana principal de la aplicación, si seleccionamos Template Browser, haciendo click en el icono del mundo, podemos descargar mas plantillas, no solo de NHibernate.

Luego, seleccionamos el template deseado, presionamos Execute, y la aplicación generará el código definido (C#, VB, o lo que sea según el template seleccionado) y en el caso específico de estar generando para NHibernate, se generará el archivo de mapeo XML de la forma:

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
  <class name="MyAsembly.BtrIdentity,MyAsembly" table="btr_identity" lazy="true">
    <id name="IdentId" column="ident_id" type="int">
      <generator class="native" />
    </id>
    <property type="string" length="80" name="IdentNick" column="[ident_nick]" />
    <property type="string" not-null="true" length="10" name="IdentTipodocumento" column="[ident_tipodocumento]" />
    <property type="string" not-null="true" length="20" name="IdentNrodocumento" column="[ident_nrodocumento]" />
    <property type="string" length="50" name="IdentNombre" column="[ident_nombre]" />
    <property type="string" length="50" name="IdentApellido" column="[ident_apellido]" />
    <property type="string" length="1" name="IdentSexo" column="[ident_sexo]" />
    <bag name="FkBtrBirBtrIdentity" inverse="true" lazy="true" cascade="all">
      <key column="ident_id" />
      <one-to-many class="MyAsembly.BtrBir,MyAsembly" />
    </bag>
  </class>
</hibernate-mapping>

Incluso, hay algunos templates de NHibernate, que generan hasta el proyecto VS2005 o VS2003, con el correspondiente archivo de configuración para establecer la conexión a la base de datos en cuestión.

So far, So good!

Cantidad de Visitas al Articulo:

0 comentarios:

 
Este Weblog, InforMateando..., está licenciado bajo Licencia Creative Common - por Gustavo Suhit