Try fast search NHibernate

07 November 2008

La concorrenza é l’anima del commercio

Que linda frase es esa: La competencia es el alma del comercio.

Hace un tiempo largo en NHibernate implementé IProxyFactoryFactory (porting, con adaptación, desde Hibernate). Como me está pasando, últimamente, nadie entendía para que “esa cosa” es necesaria, hasta que un día un committer me escribe en privado diciéndome: “al final hay alguien que entiende para que hiciste ese trabajo” y me engancha un link. El link llevaba al blog de William C. Pierce que usó IProxyFactoryFactory junto a un tool para generar proxies que pudieran trabajar en médium-trust. Junto con la movida que hicimos para dar a la luz NH-Forge, Bill Pierce, no solo aceptó entrar en NHibernate-Contrib si no que aceptó “rever” su trabajo y cambiarle de nombre a NHibernate.ProxyGenerators (notar el plural). Hasta ese entonces el plural era, lamentablemente, solo una mera intención…

Un día, de la nada, aparece un branch en NH-Core que llevaba todo el código de NH y una implementación de un ProxyFactoryFactory para usarlo con PostSharp (come venia pensándolo hace un tiempo); el problema del branch es que todavía estaba todo incrustado a parte que no pasa la mayoría de los tests de NH. Quédense en este día porque fue el disparador…

En todo este periodo había unos asuntos que me estaban molestando no poco:

  • Pocos son lo que entienden que el hecho de declarar métodos “virtual” no es una invasión de NH.
  • NH parecía no funcionar si no existiera Castle.
  • Quien usa Spring igualmente se tiene que llevar Castle.
  • En Castle no quieren liberar release y quieren que todos trabajemos con el trunk.
  • NH tenía una dependencia a algo sin versiones.
  • La gente que usaba NH con Castle Windsor y/o ActiveRecord se volvía loca al intentar mantener todos los proyectos sincronizado.

De buen tano calentón que soy (tano=Italiano en Buenos Aires) ese día me cansé y decidí dedicar el día a “separar los tantos” y la mañana siguiente pude anunciar la anhelada separación de dependencia desde Castle.DynamicProxy2 versión x.y.z (cualquiera porque no tiene, nunca fue liberado desde casi dos años).

Bueno… lo único que faltaba era solo empezar a generar alternativas… Den una vista a este link, al fondo, y fíjense cuan larga fue esta historia; falta muy poco para que cumpla un año. Hoy puedo anunciar la primera alternativa a Castle.DynamicProxy2 en NHibernate. Nació NHibernate.ProxyGenerators.LinFuDynamicProxy.

LinFuDynamicProxy será, probablemente, la alternativa que usarán quien no usa ningún IoC-FW en su proyecto ya que es una sola DLL, pesa 23KB (para NET3.5) y tiene una leve mejora en performance respecto a Castle (no estoy completamente seguro pero me pareció midiendo los tiempos de ejecución de los tests de NH).

Para quien usamos IoC falta un paso; ¿no se imaginan cual? No sé exactamente para cuando, pero espero pronto sea disponible NHibernate.ProxyGenerators.SpringDynamicProxy.

¡A ver si se logra trabajar con algo que tenga versión! ;-)

 Technorati Tags: ,,,,

7 comments:

  1. Yo agregaria otra frase: "La astrazione é l’anima del software"

    ReplyDelete
  2. L'astrazione é l'anima del software... muy buena compro.

    ReplyDelete
  3. Muy bueno el articulo y la iniciativa. Respecto a spring aun siendo cosido y bordado por vos el Port...mmm, todavia prefiero Castle...Spring solo de mirar XML me hace poner bizco.

    ReplyDelete
  4. La prox semana sale la nueva versión de Spring.NET y ya tiene varias cosas mas "NET oriented" (aunque ante siempre la hicieron en JAVA).

    ReplyDelete
  5. Fabio, antes que nada felicitaciones por tu trabajo. Quería preguntarte que opinabas acerca del framework IoC Ninject?

    ReplyDelete
  6. No lo he visto muy a fondo. Me parece que lo está usando S#arp Architect. IMO Castle.Windsor y Spring.NET dan un poco mas de seguridad.
    Lo que me parece muy interesante es LinFu pero el problema allí es que es un "one man show" y no tiene muchos tests pero te aseguro que tiene muchas cosas interesantes.

    ReplyDelete
  7. Muchas gracias Fabio, la verdad que los frameworks de IoC son un concepto muy nuevo para mi, estamos empezando un proyecto nuevo utilizando una arquitectura "inspirada" en el artículo publicado en codeproject por Billy McCafferty (creador de S#arp Architect).
    Conocí Ninject a través de S#arp como bien mencionaste, y lo que me atrajo, aunque parezca sonso es su wikipedia llamada dojo. La teoría esta muy bien explicada para alguien como yo que recien empieza.

    ReplyDelete