Archivo de la etiqueta: hibernate

NHibernate: Ventajas y Desventajas

NHibernate: Ventajas y Desventajas

A continuación comparto con ustedes un artículo de información técnica sobre la tecnología NHibernate que es un framework para el trabajo con base de datos.

1. Nombre del Framework NHibernate for .NET
Líder de Proyecto: Sergey Koshcheyev
Aportantes: Ayende Rahien y otros
Último desarrollo: 1.2.0.GA
Fecha de desarrollo : 03 de Mayo del.2007
Requisitos: .NET Framework 1.1 o 2.0

2. Pagina web del framework
http://www.hibernate.org/343.html

3. Datos técnicos

– Criterios de selección
– NHibernate Query Language
– Manejo de caché
– Relaciones M_N y bidireccionales.
– Cargas polimórficas.

4. Ventajas

– Documentación de la comunidad de Hibernate, la más amplia alrededor del Object Mapping
– Muchos ejemplos en internet
– Última versión que incorpora lo presente en el mercado en el mes de Mayo de este año
– Existe excelente documentación en Español:

Leandro Tuttini documenta un ejemplo práctico
Introducción a NHibernate por Martín Cabrera
Darío Quintana presenta la herramienta de diseño de queries para NHibernate Query Analizer
Angel “Java” Lopez presenta: Generando código para NHibernate (Parte 1) y Recursos sobre Hibernate

– En inglés las dos fuentes más citadas son:

En The Code Project”>Optimizing Performance in NHibernate Part 2: A Collection of Enhancements
En The Server Side -> NHibernate por Justin Gehtland

– Del aportante más importante: Ayende Rahien

Almacenando queries en SQL dentro de un xml
Ejemplo básico por Ayende Rahien

5. Apreciación Propia

– Creo que es una herramienta muy buena y actualizada
– Está presente en todos los análisis a herramientas del tipo Object Relational Mapper
– Se considera muy fuerte dentro del desarrollo en .NET

6. Apreciación de Terceros

– Los criterios generales para evaluar un ORM lo encontré aquí.
– Y en el caso específico de .Net fue aquí.

Puntos Positivos

– Código abierto
– Soporta DataBinding
– Puede aceptar queries SQL directos (se los guarda en el xml)
– Se puede integrar con frameworks de MVC ( como Struts para Java ) o metaframeworks como Spring.
– Soporta las relaciones entre objetos (El usuario puede elegir el nombre y el tipo de datos de las llaves foráneas)
– Soporta agrupamiento (GROUP BY)
– Soporta agregación (COUNT, AVG, ETC.)
– Soporta llaves primarias compuestas
– Soporta asociaciones muchos a muchos y uno a muchos
– Soporta persistencia de propiedades a través de los campos de propiedades
– Soporta persistencia de propiedades a través de accessors (get/set methods or properties y pueden ser privados)
– Soporta trabajo offline y luego aplicar los cambios a la base de datos
– Soporta WebServices (la tecnología más moderna para la Integración de aplicaciones web, y el paradigma de programación moderno de programación orientada a servicios, publicación de servicios)
– Soporta tipos nulos
– No se require generar código pre compilado

Puntos Negativos

– No soporta carga no transaccional lazy de relaciones
– No soporta Aggregate Mappings – Single Un campo a muchos campos en la base de datos
– No sorpota querying transparente a múltiples recursos de data

Puntos en duda, no se sabe, no se conoce

– Soporte a móltiples servidores (clustering)
– Uso de reflección en tiempo de ejecución
– Filtrado de objetos en memoria sin consultar a la base de datos.
– Batch Update (actualizar muchos objetos sin crear objetos).
– Batch Delete (eliminar muchos objetos sin crear objetos, es útil en Delete en cascada para las relaciones “N A Muchos” » Leer más