Una de las puertas que dejó abierta el port de EventListeners, es la posibilidad de crear algunas clases para poder validar objetos antes de ser guardados (como así también antes de ser borrados).

Una opción es portar Hibernate.Validator, pero… alguién realmente va a usarlo? Yo personalmente creo que no. Mirando su implementación y qué hace, no ofrece mucho más de lo que se puede encontrar del lado de .Net con algunas librerías. Quizás algún día se porte Hibernate.Validator, pero por ahora, yo creo que es más importante portar algunas otras features de Hibernate, estas se van a aprovechar más.

Una opción valida, es crear bridges entre NHibernate (EventListeners) y algunos frameworks conocidos en .Net para la validación de entradas (input validation).

Algunas opciones que se me ocurren:

La implementación ya sea Hibernate.Validator (no creo) o algún bridge para los mencionados, se hará en uNHAddIns.

Un punto interesante, sería que posea la posilidad de extensibilidad para validadores hechos por nosotros.

 

3 Responses to Validación en NHibernate

  1. [...] este post estaba adelantando algo que estoy empezando a hacer, por ahora bosquejando y pensando, sin [...]

  2. Buenisimo lo que vas a hacer. Te comento que hoy en dia es bastante complicado lograr la misma funcionalidad asi que si vos simplificas eso te transformas en un nuevo idolo. ;)

    Es decir, para lograr integrar hoy en dia (v1.2ga) una integracion hay que implementar IInterceptor , etc. Es mucho trabajo y lo peor es que no es muy “simple de entender” . Especialmente cuando la gente piensa que todos los calls pasan por los DAO. La mayoria de los mundamos (a los cuales pertencezco) se olvida de los cascade updates.

    Uno de los casos mas simples (y es el que nosotros usamos ) es basicamente implementar una interface IValidatable (implementado en los POCO).

    Tenes pensado algo para este caso? (en tu texto diste a entender que si, pero despues te concentras en los 2 frameworks (CLSA + EL ).

    Mi imagino algo como: esta es mi interface (IValidatable) , esta propiedad (de la interface) determine si es valido (IsValid). Creo que en el sentido contrario no seria lo mismo (me cuesta explicar por que pero estoy casi seguro que no seria lo mejor..). Es decir, si Nhibernate define la interfaz .

    Otros comentario: como probablemente ya sabes el Enterprise Library validation block funciona mediante injection “agregando una fachada” en la creacion del DAO. Es decir que para integrarlo basicamente tambien deberia tener informacion basica sobre la architectura de los DAO’s (aca me perdi como pensas hacerlo .. )

    Buenos Saludos y Feliz Navidad!

  3. Hola Sebastian, podés ir viendo algo de lo que hice aquí:
    http://blog.darioquintana.com.ar/2007/12/14/nhibernate-eventlisteners-cualquier-framework-de-validacin/

    Este ejemplo muestra como integrar Enterprise Library en NHibernate en la validación. En realidad se puede integrar con cualquier framework, solamente resta hacer el bridge para el respectivo.

    Por otro lado, estoy portando Hibernate Validator a .Net: http://www.hibernate.org/412.html

    NHibernate Validator es un framework de validación como lo es EntLib Validation App Block o Castle Validators. Y por ahora no brinda la capacidad de integración con algún otro framework de Validación.
    Podés ir mirando los tests aquí:
    https://nhibernate.svn.sourceforge.net/svnroot/nhibernate/trunk/nhibernate/src/NHibernate.Validator/src/

    Saludos

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>