2008-09-26 9 views

Respuesta

4

Microsoft Code Contracts, que son parte de .NET Framework desde 4.0 CTP y están disponibles para versiones anteriores de .NET Framework como un paquete independiente, permiten especificar suposiciones de codificación. Esto incluye especificar las condiciones previas que pueden verificar los parámetros.

Un ejemplo de uso para la comprobación de los parámetros deben ser (copiada de Code Contracts documentation):

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

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

La ventaja de utilizar Code Contracts es que es una biblioteca que será parte de las futuras versiones de .NET Framework, por lo que tarde o más adelante tendrá una dependencia menos en su aplicación.

EDIT: Acaba de notar que usted solicita específicamente una biblioteca que utiliza Atributos para la comprobación de argumentos ... que Código Contratos no. La razón por la cual los contratos código no utilizan atributos aparece en su FAQ:

La ventaja de utilizar atributos personalizados es que no afectan el código en absoluto. Sin embargo, los beneficios del uso de las llamadas a métodos son muy superiores a la primera opción aparentemente natural de atributos:

apoyo Duración: Sin depender de una re-escritura binaria, contratos expresados ​​con atributos no pueden hacerse cumplir en tiempo de ejecución. Esto significa que si hay condiciones previas (u otros contratos) que desea aplicar en el tiempo de ejecución, necesita duplicar los contratos en el código o incluir un reescritor binario en su proceso de compilación. Contract.RequiresAlways 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 los atributos personalizados son limitados, las condiciones terminan codificadas como cadenas. Esto requiere definir un nuevo lenguaje que sea apropiado para todos los lenguajes de origen, requiere que las cadenas sean analizadas, duplicando toda la funcionalidad que el compilador ya posee.

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

+0

buenos puntos re: atributos –

1

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

7

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

+1

Gracias !!!! <- ¡múltiple! debido al requisito de 10 caracteres :) –

1

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

2

mientras que los contratos de código son Microsoft fuera por un tiempo, todavía están alojados en la EM Investigación y no se puede utilizar la configuración (app.config/base de datos, etc.) a enciende/apaga o incluso cambia las reglas. Mi biblioteca Bouncer proporciona definición de regla declarativa: atributos en código fuente o aplicación.entradas de configuración para reglas a nivel de clase/propiedad de entidad. 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.

Cuestiones relacionadas