Debido a que NHibernate.Validator es un framework para validar objetos, y no tiene restricciones acerca de donde realizar la validación, pensé que podría ser interesante tener algún tipo de integración con Winforms o Asp.Net. Por ahora me inclino hacia el lado de Winforms donde estoy más cómodo programando.

El siguiente ejemplo intenta validar un simple formulario con un par de cajas de texto:

Ahora bien, como fue validado esto? Usando NHibernate.Validator y unas clases ayudantes que se encuentran en Suricato.Winforms.Validation. La clase ViewValidator es la encarga de realizar los enlaces de los controles con las reglas. Esta es la configuración:

Como pueden ver, ViewValidator recibe el ErrorProvider que mostrará los controles que poseen inconsistencia en sus valores. Prácticamente lo que se hacer es enlazar un control de la UI con ciertas reglas que le corresponden a propiedades de un objeto. Por ejemplo el TextBox “tFirstName” se corresponde con las reglas de validación de la property “FirstName” en la clase Customer. Seguidamente se añade el evento que debe realizar la validación del control.

Esto se podría realizar de una manera más fácil? Si, con un esquema similar la clase SmartViewValidator realiza el enlace de los objetos y el registro de los eventos de manera más automática.

SmartViewValidator hará por nosotros algunas cosas automáticamente. Con un poco de menos de código se puede lograr el mismo trabajo, pero debemos ponernos de acuerdo en algunas normas en nuestro código.

Los controles, deben tener un prefijo en minúsculas, seguido del nombre de la propiedad que están representando. Por ejemplo si tenemos un control llamado “txtNombre”, el nombre de la propiedad sería “Nombre”, si escribimos “dtpFecha”, este DateTimePicker se corresponderá con la property “Fecha” de alguna clase.

Debemos acordarnos de inicializar estos controles luego de que InitializeComponent() sea llamado por nuestro formulario, en caso contrario el ErrorProvider valdrá null.

Ahora vemos como luce una clase que posee la validación de NHibernate.Validator:

Como pueden ver, con algunas clases podemos usar NHibernate.Validator también en la UI, solamente hace falta configurar 1 línea por control y todo queda integrado con Winforms.

Descargar el ejemplo de NHibernate.Validator + Winforms

 

One Response to NHibernate Validator en Winforms

  1. GLM says:

    No vi NHibernate Validator aun, pero me implemente uno propio que hace (solamente) esto. Lo anoto a mis entities con “restricciones” de validacion y luego el “framework” (200 lineas de codigo como mucho) Hace algo que a mi me parecio interesante:
    Recorre los controles de un contenedor que se le envia, generalmente el form, o un group box, etc, luego mira los bindings que este tiene, casi siempre cuando yo programo bindeo los controles en tiempo de disenio, luego de ver que bindings tiene aplica las validaciones a los controles necesarios. El resultado de esto es que agregar validacion a un form siempre requiere las mismas (pocas) lineas que es para setear y hago incapie en que no tengo que decirle como validar cada control en particular (soporte para textbox y drop down lists de momento)

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>