Pregunta

¿Existe un marco estándar (tal vez parte de Enterprise Library ... o .NET mismo) que le permita realizar la validación de parámetros comunes en los atributos de los métodos?

¿Fue útil?

Solución

Contratos de código de Microsoft , que forman parte de .NET Framework desde 4.0 CTP y están disponibles para versiones anteriores de .NET Framework como un paquete independiente, permiten especificar supuestos de codificación. Esto incluye la especificación de condiciones previas que pueden verificar los parámetros.

Un ejemplo de uso para la comprobación de parámetros sería (copiado de documentación de Contratos de Código ):

public Rational(int numerator, int denominator)
{
    Contract.Requires(denominator ! = 0);

    this.numerator = numerator;
    this.denominator = denominator;
}

El beneficio de usar Contratos de Código es que es una biblioteca que formará parte de las futuras versiones de .NET Framework, por lo que tarde o temprano tendrá una dependencia menos en su aplicación.

EDITAR: Acabo de notar que está solicitando específicamente una biblioteca que utiliza atributos para la verificación de argumentos ... que los contratos de código no. La razón por la que los contratos de código no utilizan atributos se encuentra en su Preguntas frecuentes :

  

La ventaja de usar atributos personalizados es que no afectan el código en absoluto. Sin embargo, los beneficios de usar llamadas a métodos superan con creces la primera opción de atributos aparentemente naturales:

     

Soporte en tiempo de ejecución: Sin depender de un reescritor binario, los contratos expresados ??con atributos no pueden ejecutarse en tiempo de ejecución. Esto significa que si hay condiciones previas (u otros contratos) que desea que se cumplan en el tiempo de ejecución, debe duplicar los contratos en el código o incluir a un reescritor binario en su proceso de compilación. Contract.RequiresSiempre sirve como un contrato declarativo y como una validación verificada en tiempo de ejecución.

     

Necesidad de análisis: Como los valores que se pueden usar con atributos personalizados son limitados, las condiciones terminan siendo codificadas como cadenas. Esto requiere definir un nuevo idioma que sea apropiado para todos los idiomas de origen, requiere que se analicen las cadenas, duplicando toda la funcionalidad que el compilador ya posee.

     

Falta de soporte de IDE: Expresado como cadenas, no hay soporte para Intellisense, verificación de tipos o refactorización, todos los cuales están disponibles para la creación de contratos como código.

Otros consejos

La Microsoft Enterprise Library tiene la biblioteca / espacio de nombres Microsoft.Practices.EnterpriseLibrary.Validation que permite la validación utilizando atributos.

Aunque los Contratos de Código de Microsoft están fuera por un tiempo, todavía están alojados en MS Research y no puede usar la configuración (app.config / database, etc.) para activar / desactivar o incluso cambiar las reglas. Mi biblioteca Bouncer proporciona una definición de regla declarativa: atributos en el código fuente o entradas app.config para las reglas en la clase de entidad / nivel de propiedad. La biblioteca es de código abierto bajo LGPL (puede usarla libremente en productos comerciales). Si configura las reglas a través de app.config, puede ajustar la configuración de las reglas sin la necesidad de una recompilación.

Dynamic Data para ASP. NET (y ASP.NET MVC) le permite realizar la validación de las propiedades del modelo utilizando atributos.

También puede usar postsharp e implementar sus propios atributos para la validación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top