35 votes

Quelle est l'utilisation pratique des contrats de code dans .NET 4.0 ?

Afin de bien comprendre et de tirer profit des nouvelles fonctionnalités et des améliorations apportées par l'arrivée du nouveau .NET Framework 4.0, je voudrais obtenir un exemple de le monde réel l'application de Contrats de code .

  1. Quelqu'un a-t-il un bon exemple d'application de cette fonctionnalité ?

J'aimerais obtenir un exemple de code avec une brève explication pour m'aider à le mettre en œuvre.

23voto

Richard JP Le Guen Points 13306

De Manuel d'utilisation des contrats de code :

Les contrats vous permettent d'exprimer des préconditions, des postconditions et des invariants d'objet dans votre code pour le temps d'exécution. l'analyse statique et la documentation.

Les contrats de code sont utilisés pour vérification statique imaginez si, au moment de la compilation, vous repérez non seulement les erreurs de syntaxe, mais aussi les erreurs d'écriture. erreurs logiques . C'est la vision de la vérification statique des programmes.

Exemple concret

Vous pourriez utiliser les contrats (et la vérification statique) pour réduire le coût des tests... en particulier des tests de régression. Par exemple, disons que j'écris un code qui répond à certains besoins de l'entreprise... mais plus tard, les besoins de performance changent et je dois l'optimiser. Si j'écris d'abord un contrat, alors - lorsque mon nouveau code optimisé est vérifié - s'il ne remplit plus le contrat original, j'obtiendrai un message d'erreur dans mon IDE, tout comme si j'avais une erreur de compilation. Ainsi, vous trouvez et résolvez le bogue presque immédiatement, ce qui coûte moins cher qu'une série de tests.

14voto

Thorarin Points 21538

Il existe un chapitre librement disponible sur les contrats de code dans le livre à paraître C# in Depth, deuxième édition . Par un type nommé Jon Skeet, certains d'entre vous le connaissent peut-être :)

Quant à l'usage pratique. Vous pouvez les utiliser n'importe où dans votre code, mais surtout si vous développez des bibliothèques de type framework / API que beaucoup de gens utiliseront, je m'attends à ce qu'elles soient très pratiques. La vérification statique de votre code permet d'économiser un lot de temps par rapport au fait de découvrir au moment de l'exécution que vous n'avez pas traité un cas limite.

Vous pouvez documenter l'utilisation de votre méthode autant que vous le souhaitez, mais les gens liront-ils réellement cette documentation ? Est-il autorisé que le paramètre x de la chaîne de caractères dans la méthode y soit nul, ou non ? Les contrats de code peuvent fournir ces informations, afin d'éliminer les incertitudes de l'équation.

Voici un exemple d'un tel cas :

static int CountWhitespace(string text)
{
    Contract.Requires<ArgumentNullException>(text != null, "text");
    return text.Count(char.IsWhiteSpace);
}

La vérification se plaindra si quelqu'un essaie de passer une chaîne de caractères à CountWhitespace qui pourrait être nulle. En outre, une exception ArgumentNullException sera levée au moment de l'exécution.

Je n'ai que récemment converti ma bibliothèque de classes privées en .NET 4.0, mais je prévois d'y ajouter des contrats de code très bientôt.

8voto

Roman Bats Points 1722

Il y a beaucoup d'endroits où les contrats sont utilisés dans .Net. >>Sources<<

5voto

Mark Byers Points 318575

Avez-vous déjà vu un NullReferenceException et vous auriez souhaité que le compilateur puisse vous en avertir au moment de la compilation pour éviter de le découvrir à la dure - avec le plantage de votre programme ?

Avec les contrats de code, vous pouvez écrire des choses comme :

Contract.Requires(foo != null);

Il ne s'agit pas seulement d'un contrôle à l'exécution - vous pouvez le configurer de telle sorte que si vous appelez cette fonction avec un argument qui pourrait être nul, vous obtiendrez une erreur de compilation.

Voici un exemple concret :

Address GetAddress(Customer customer)
{
    Contract.Requires<ArgumentNullException>(customer != null, "customer");
    return addressBook.FindCustomer(customer);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X