Bueno, sé que el titulo suena como “eh !?”, pero dejenme explicarlo un poco más en detalle.

NHibernate es una framework que usa Xml nativamente para configurar los mapeos entre objetos y tablas, que está encargado de juntar estos 2 mundos diferentes.

Ahora, qué tiene de malo esto? Mucha gente puede decir que los archivos Xml son malos, por que después de escribir muchas líneas, intentamos compilar nuestro proyecto, y el compilador de nuestro lenguaje host no sabe si el Xml está bien o no, no nos informa con ningún error. Esto es verdad, se debería correr el proyecto y ver que acontece en tiempo de ejecución, y obtener un error en runtime es simplemente molesto.

Pero bien, tenemos otra alternativa a esto? La respuesta es sí. Vayamos a los detalles. NHibernate tiene también un “compilador”, y si todavía no te lo imaginaste, es el método BuildSessionFactory(). No es necesario lanzar toda la aplicación para saber si nuestros mappings están bien o mal. Una manera de saber si todo está bien es crear un metodo de Test como este:

Luego solamente queda compilar nuestro proyecto, y correr este simple y tonto test. Si nuestro código pasa esta prueba, tus mapeos están bien.

Debemos recordar una cosa, se puede mapear no solamente entidades en los Xml, también se pueden mapear Queries (y otras cosas que no son relevantes en este post). El mapear queries en Xml se llama: Named Queries, y en este post hablamos un poco más de sus bondades. Pero el punto principal aquí es, que mapeando las queries sabrás si están bien formadas o no cuando el método BuildSessionFactory() es disparado (se hacen otras cosas aparte de compilar las queries, se discuten en ese post).

Otra cosa que DEBES recordar es usar Xsd para validar los mappings files. Esto es obligatorio si estás usando NHibernate y quieres pasar el tiempo programando en vez de luchando con errores de mapeo (aquí los errores pueden ser inclusive de Xmls mal formados, donde esto es más grave). Pero esto es tema para otro post.

 

5 Responses to NHibernate no está integrado con el compilador, y qué ?

  1. Kawieli says:

    Hola darío, primeramente presentarme y darte la enhorabuena por la web y tantos posts comentados hacerca de temas de informática como son NHibernate. La verdad llevo un año y un mes realizando una aplicación usando este modo de acceder a los datos y la verdad estoy muy contento aunque siempre hay cosas que puedo mejorar en la aplicación. Usé tus tutoriales hará un año para poder conocer el concepto de ORM y la verdad es que correr el riesgo ha valido la pena, te dejo mi nueva web, aún faltan por poner contenidos pero espero que dentro de poco pueda llegar a los posts que has llegado tú y poder compartir experiencias a la hora de la programación así como todas las experiencias vividas.

    http://contenidodigital.wordpress.com/

    Un saludo

  2. Hola Dario…

    Leyendo tu post me puse a pensar que tan dificil sería poder obtener los errores en mapping en tiempo de compilación. Una idea me ronda en la cabeza y no se hasta donde puede ser correcta.

    Qué pasa si yo creo una aplicación que tome del proyecto actual el archivo de configuración de NH, y a partir de ahi intente levantar los XML usando el BuildSessionFactory, los errores podría capturarlos y mandarlos al output.

    Si esta aplicación la pongo como una opción en el post-build que Visual Studio debe ejecutar tras terminar de compilar, ¿no obtendría los errores de mapping sin necesidad de ejecutar ni mi proyecto ni correr el test?

    No estoy diciendo que el test no sea necesario… eso es una garantía más… y no se discute ;)

    Todo esto te lo estoy escribiendo sin ni siquiera pensar mucho en si es posible o no… ya me comentas..

    Ahora estoy un poco que a FULL TIME, no me queda tiempo ni para respirar… pero en cuanto tenga unos minutos los voy dedicar a esto y ver que sale.. (avisame de los pro y contras que puede tener esto, para no perder tiempo jejeje )

    Salu2
    Omar

  3. Hola Omar, como estás.

    La verdad que es una buena idea, los pros saltan a la vista.

    La única contra que le veo es el tiempo que puede tomar en hacer el BuildSessionFactory cuando hay muchos mappings, quizás pueda tardar sus segundos, y si estamos trabajando en la UI (sin tocar nada del modelo) por mucho tiempo puede ser engorroso cada vez al compilar, NHibernate vuelva a correr su “compilacion”.

    Saludos

  4. Yo siempre lo digo.. mientras más cabezas.. mejor se piensa.. jejeje. Gracias

    Voy a pensar en los contras.. pero asi a lo rapido se me ocurre que como soy yo quien maneja la invocación del BuildSessionFactory desde la aplicación que pondremos como post-build, pudiera controlar que esta acción se realice solo si detecto que se ha modificado algún HBM.

    Salu2
    Omar

  5. fabian says:

    estoy empezando con NHibernate y necesito mapaer una BD Firebird que tanta estabilidad abra si el software constante mente esta accediendo al disco haciendo CRUD ¿o no me recomiendas mapaer la BD?

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>