Geeks With Blogs

News Locations of visitors to this page
Ariel Popovsky's Blog Aventuras y desventuras con .net

NOTA (2009-06-26): Existe una librería oficial de NHibernate Validator con validadores adicionales específicos para ciertos paises, NHibernate.Validator.Specific.dll (descargar) y ya cuenta con un validador de CUIT. Gracias Fabio Maulo por el dato.


La aplicación en la que estoy trabajando está basada en ASP.net MVC y utilizamos Sharp Architecture como base. Sharp Architecture utiliza a su vez NHibernate Validator para la validación de las entidades de negocio por lo que, continuando con el tema del post anterior, decidí armar un validador de CUIT/CUIL personalizado y aplicarlo en nuestras clases.

Crear una validador para Nhibernate Validator es muy simple, solo se requieren dos clases simples, el validador propiamente dicho y un atributo. Empecemos por el atributo:

   1:  [Serializable, ValidatorClass(typeof(CuitValidator)), 
   2:      AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
   3:  public class CuitAttribute : Attribute, IRuleArgs
   4:  {
   5:      private string message;
   6:      
   7:      public CuitAttribute()
   8:      {
   9:          this.message = Glossary.Validation_Cuit_Invalid;
  10:      }
  11:      
  12:      public string Message
  13:      {
  14:          get { return message; }
  15:          set { message = value; }
  16:      }
  17:  }

 

Lo más importante es que debemos implementar la Intefaz “IRuleArgs” provista por el framework de validación (además de extender Attribute) y aplicar a su vez el atributo “ValidatorClass” el que indica cual es la clase concreta encargada de realizar la validación para los miembros que tengan este atributo.

La clase en cuestión es también muy simple, implementa la interfaz “IValidator”, cuyo único método es IsValid. Recibe el valor del miembro a validar y debe devolver True si es válido o False si no.

En mi implementación solo necesito llamar a la clase creada en el post anterior:

   1:  [Serializable]
   2:  public class CuitValidator:IValidator
   3:  {
   4:      public bool IsValid(object value)
   5:      {
   6:          return value == null || 
   7:                 value.ToString()==string.Empty || 
   8:                 CuitHelper.ValidaCuit(value.ToString());
   9:      }
  10:  }

Notese que si el valor es nulo o vacio lo damos por válido. Esto se debe a que para validar si un campo es requerido contamos con atributos más específicos (NotNull, NotNullOrEmpty).

Solo resta aplicarlo:

   1:          /// <summary> 
   2:          /// CUIT/CUIL de la persona Juridica. 
   3:          /// </summary> 
   4:          [Cuit]

 

Posted on Wednesday, April 29, 2009 10:58 PM NHibernate | Back to top


Comments on this post: Creando un Validador Personalizado para NHibernate Validator

# re: Creando un Validador Personalizado para NHibernate Validator
Requesting Gravatar...
Solo para decirte que el validador de CUIT ya está incluido en NHV en los validadores para Argentina
http://nhcontrib.svn.sourceforge.net/viewvc/nhcontrib/trunk/src/NHibernate.Validator/src/NHibernate.Validator.Specific/Ar/CUITValidator.cs?revision=872&view=markup
Left by Fabio Maulo on Jun 26, 2009 12:14 AM

Your comment:
 (will show your gravatar)


Copyright © Ariel Popovsky | Powered by: GeeksWithBlogs.net