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!

Leer más...

miércoles, 11 de febrero de 2009

Cantidad de Visitas al Articulo:

Nuevos Horizontes…

Desde el 26 de Diciembre del 2008, ya no pertenezco a la empresa Biokey Identity Technologies Ltda., y de hecho desde el 27 de Enero del 2009, tampoco existe mas la empresa.

A partir de allí, comencé a diagramar mi futuro, y comencé a analizar nuevos horizontes.

Luego de ésta experiencia, con muchos aprendizajes, algunos lindos, otros no tanto, y comprendiendo finalmente de la peor forma la inflexibilidad y la necedad de algunas personas, dejando escapar enormes oportunidades por ataques de ego, llegue a algunas conclusiones que estoy seguro me ayudarán en el futuro. Aquí las comparto, y siéntanse libres  de opinar si lo desean.

Por lo pronto, estoy trabajando bien, de forma independiente, y armando proyectos mas que prometedores, en el mismo rubro y en otros. Además, cualquier oportunidad será bien recibida.

Conclusiones

No poner todos los huevos en la misma canasta

Me costó mucho tiempo aceptar que puede hacerse, siempre y cuando consigas “aprender” a delegar, y luego seas claro en la comunicación con quien delegas. Quiero decir, no hace falta estar en todo, en cada detalle, solo debes saber rodearte de las personas indicadas y luego ser claro, coherente y “consecuente” en el tiempo. Poner todos los huevos en la misma canasta no hace mas que asegurarnos que si esa canasta se cae, es factible que se rompan todos los huevos. Así pues, entonces, diversificar para crecer ha sido mi primera conclusión.

Animarse a descubrir caminos nuevos derribando prejuicios

Desde que tengo memoria, siempre me llamó la atención la mente y sus poderes. Siempre estuve de acuerdo con lo que decía Einstein: “la mente te enferma y la mente te cura”.  Por supuesto encontré por consecuencia apasionante todas las disciplinas que trabajan con la mente, como 3044919392_4f0a0d5612_mcontrol mental, hipnosis, etc. Es por ese motivo que derribando  fantasmas de prejuicios sociales, muy míos, “aprendidos”, me forme como Hipnoterapeuta, y desde ya hace un buen tiempo comencé con un camino paralelo, bastante alejado (o no, quién sabe) de la lógica informática, el que me produce un desafío constante, me apasiona, y me llena de satisfacciones cuando siento que ayudo a alguno de mis pacientes. 

La conclusión, en todo caso, para mi con este “animarme”, fue que cuanto mas te alejas de las cosas que te movilizan, mas te apagas en el resto de tu vida. Si bien la informática me gusta, no me termina de llenar, por lo que la conjunción de estos (y otros) temas, hacen de mi una mejor persona. O al menos me hacen sentir mejor, que aunque suene egoísta, es el comienzo básico para cualquier otro tema.

La invitación es entonces, a que visiten mi otro blog, Hipnomateando…, y aporten lo que quieran, que será siempre bienvenido, estén de acuerdo o no.

No hay pero ciego...que el que no puede ver?

Solo haré referencia a un artículo que lo explica mejor. A mi me paso en este caso, y me parece bueno compartirlo.

Claridad de rumbo 

Muchas veces uno tiene vagamente en su cabeza que es lo que quiere, y difícilmente lo instancia en algo concreto. Muchas veces decimos “quiero ser rico” por ejemplo, pero que es eso en realidad?  Lo que para mi es “rico” para otra persona puede ser tener un buen fin de mes, y  viceversa. Lo que si hacemos, es que nos ponemos firmes en el “como hacernos ricos”, convirtiéndonos a veces, en “adoquines inflexibles” tirando para adelante.

Relacionado con la “apertura de posibilidades” que hablaba al comienzo, aprendí que debo fijar mis objetivos, lo mas claros y palpables (medibles) posible, y luego confiar que eso llegará, sin ser tan “cabezón”  y pretender que llegará de la forma que yo creo sin dejar la puerta abierta para que llegue por otro lado. Claro, tampoco la pavada, al “confiar” hay que ayudarlo trabajando, pero siempre dentro de los parámetros que nos hagan sentir bien, en la mayor parte del camino (ojala en todo el camino), de otra forma, es una cuestión de tiempo, para que la bomba explote en nuestra cara. Quiero decir, trabajar seriamente no significa ni trabajar excesivo, ni trabajar con cara de c… Se puede ser feliz trabajando y eso se refleja invariablemente en los resultados.

So far, so good

Imágenes by Flickr

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