Question

Existe-t-il un framework standard (peut-être une partie de Enterprise Library ... ou .NET elle-même) vous permettant de valider les paramètres communs dans les attributs de méthode?

Était-ce utile?

La solution

Contrats de code Microsoft , qui font partie du .NET Framework depuis 4.0 CTP et sont disponibles pour les versions antérieures de .NET Framework en tant que package autonome, permettent de spécifier des hypothèses de codage. Cela inclut la spécification de conditions préalables permettant de vérifier les paramètres.

Voici un exemple d'utilisation de la vérification des paramètres: copié de Documentation sur les contrats de code ):

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

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

L'avantage d'utiliser les contrats de code est qu'il s'agit d'une bibliothèque qui fera partie des futures versions de .NET Framework. Ainsi, tôt ou tard, vous aurez une dépendance de moins dans votre application.

MODIFIER: vous venez de remarquer que vous demandez spécifiquement une bibliothèque qui utilise des attributs pour la vérification des arguments, contrairement à Contrats de code. La raison pour laquelle les contrats de code n'utilisent pas d'attributs figure dans leur FAQ :

  

L'avantage d'utiliser des attributs personnalisés est qu'ils n'ont aucun impact sur le code. Cependant, les avantages liés à l'utilisation d'appels de méthode dépassent de loin le premier choix d'attributs apparemment naturel:

     

Prise en charge de l'exécution: Sans dépendre d'un enregistreur binaire, les contrats exprimés avec des attributs ne peuvent pas être appliqués au moment de l'exécution. Cela signifie que s'il existe des conditions préalables (ou d'autres contrats) que vous souhaitez appliquer au moment de l'exécution, vous devez dupliquer les contrats dans le code ou inclure un programme de réécriture binaire dans votre processus de génération. Contract.RequiresAlways sert à la fois de contrat déclaratif et de validation vérifiée à l'exécution.

     

Besoin d'analyse: Les valeurs pouvant être utilisées avec des attributs personnalisés étant limitées, les conditions sont finalement codées sous forme de chaînes. Cela nécessite de définir un nouveau langage adapté à toutes les langues source, d’analyser les chaînes et de dupliquer toutes les fonctionnalités du compilateur.

     

Absence de prise en charge par l'EDI : Exprimé sous forme de chaînes, Intellisense, la vérification de type ou le refactoring ne sont pas pris en charge. Tous sont disponibles pour la création de contrats sous forme de code.

Autres conseils

La bibliothèque Microsoft Enterprise possède la bibliothèque / l'espace-noms Microsoft.Practices.EnterpriseLibrary.Validation qui permet la validation à l'aide d'attributs.

Bien que les contrats de code Microsoft aient été utilisés pendant un certain temps, ils sont toujours hébergés dans MS Research et vous ne pouvez pas utiliser la configuration (app.config / database, etc.) pour activer / désactiver ou même modifier les règles. Ma bibliothèque Bouncer fournit la définition de règle déclarative: attributs dans le code source ou entrées de code app.config pour les règles de la classe d'entité. / niveau de la propriété. La bibliothèque est opensource sous LGPL (vous pouvez l’utiliser librement dans des produits commerciaux). Si vous configurez les règles via app.config, vous pouvez ajuster les paramètres de règle sans recompiler.

Données dynamiques pour ASP. NET (et ASP.NET MVC) vous permettent de valider les propriétés du modèle à l'aide d'attributs.

Vous pouvez également utiliser postsharp et implémenter vos propres attributs pour la validation.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top