Le meilleur moyen d'affirmer les conditions préalables et les conditions préalables des arguments et des valeurs dans .NET?

StackOverflow https://stackoverflow.com/questions/155422

  •  03-07-2019
  •  | 
  •  

Question

Je pensais à la conception par contrat récemment et je me demandais ce que les gens pensaient être le meilleur moyen d'affirmer la condition préalable et la condition préalable des valeurs dans .NET? c'est-à-dire valider des valeurs d'argument dans une méthode.

Certaines personnes recommandent Debug.Assert, tandis que d’autres parlent d’utiliser une instruction if plus une exception. Quels sont les avantages et les inconvénients de chacun?

Quels sont les frameworks disponibles que vous recommandez?

Était-ce utile?

La solution

Nous utiliserons éventuellement des contrats de code lors de la livraison de .NET 4.0. Cependant, dans notre code de production, nous avons eu beaucoup de succès avec un "Garde". classe avec moyen commun de générer des exceptions.

Pour plus de détails, voir mon message à ce sujet. .

Autres conseils

Une autre option est Spec # .

Spec # est une extension du langage orienté objet C #. Il étend le système de types pour inclure des types non nuls et des exceptions vérifiées. Il fournit des contrats de méthode sous forme de pré-et post-conditions ainsi que d'invariants d'objet.

Je préfère les exceptions aux assertions, car si c'est censé être ainsi et si ce n'est pas le cas, je veux le savoir pour que je puisse le réparer, et la couverture que nous obtenons en mode débogage est loin d'être utilisée ou réelle dans la vie réelle. Par conséquent, utiliser Debug.Assert ne suffit pas.

Utiliser des assertions signifie que vous n'ajouterez pas de ballonnement à votre code de version mais que vous ne pourrez voir quand et pourquoi ces contrats sont rompus si vous les récupérez dans une version de débogage.

L'utilisation d'exceptions signifie que vous pouvez voir le contrat rompre chaque fois qu'il se produit, qu'il soit débogué ou publié, mais cela signifie également que votre version de version contient davantage de contrôles et de code.

Vous pouvez utiliser une approche intermédiaire et utiliser Trace pour tracer vos conditions préalables et postérieures dans un type de journal d'application, que vous pouvez utiliser pour déboguer des problèmes. Cependant, vous auriez besoin d'un moyen de collecter ces journaux pour connaître les problèmes rencontrés par vos utilisateurs. Il existe également la possibilité de combiner cela avec des exceptions afin d’obtenir des exceptions pour les problèmes les plus graves.

Cependant, à mon avis, si le contrat vaut la peine d’être appliqué, il vaut la peine de lancer une exception lorsqu’il se cassera. Je pense cependant que c’est un peu à cause de l’opinion et de l’application ciblée. Si vous lancez des exceptions, vous souhaiterez probablement une forme de système de rapport d’incidents fournissant des rapports de blocage lorsque les exceptions déclenchées ne sont pas gérées.

Vous pouvez consulter le cadre actuel à l'adresse http://conditions.codeplex.com/ . Son open source et gratuit.

Spec # est le moyen de le faire, qui est un sur-ensemble de C #. Vous avez maintenant le contrat de code " ;, qui est la langue version agnostique de Spec #, donc vous pouvez maintenant avoir des contrats de code dans VB.NET, par exemple.

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