12
votes

Quand devrais-je utiliser Validate de Apache Commons, et quand devrais-je simplement utiliser le mot-clé "ASSERT"?

Quand devrais-je utiliser Validate de Apache Commons, et quand devrais-je simplement utiliser le mot-clé "Aster"?


1 commentaires

3 Réponses :


4
votes

Les assertions peuvent être désactivées (en fait, elles sont normalement), elles ne sont donc pas utiles pour la validation de la saisie de l'utilisateur, par exemple.


0 commentaires

33
votes

validate.Irue et "assert" servir complètement à des fins différentes.

affirmation

Les déclarations d'affirmation de Java sont généralement utilisées pour la documentation (par des moyens d'affirmations) dans quelles circonstances peuvent être invoquées et Ce que leurs appelants peuvent s'attendre à être vrais après. Les affirmations peuvent éventuellement être vérifié au moment de l'exécution, entraînant une assertionError exception s'ils ne tiennent pas.

en termes de conception par contrat, des affirmations peuvent être utilisées pour définir pré et postconditions ainsi que les invariants de classe. Si au moment de l'exécution ceux-ci sont détectés de ne pas tenir, cela pointe vers une conception ou une mise en œuvre Problème dans le système.

validate.istrue

org.apache.commons.lang.validate est différent. Il offre un ensemble simple des méthodes ressemblant à des junits qui vérifient une condition et lancent un "IllegalargumentException" Si la maladie ne tient pas.

Il est généralement utilisé lorsqu'une API publique devrait être tolérante contre le mauvais saisir. Dans ce cas, son contrat peut promettre de lancer un IllegalargumentException à une contribution erronée. Apache Valider les offres un raccourci pratique pour la mise en œuvre de cela.

Étant donné qu'une idée illegalargumentException est lancée, il n'a pas de sens Utiliser Validate Apache pour vérifier les postconditions ou les invariants. De même, il est incorrect d'utiliser «Assert» pour la validation des entrées utilisateur, Étant donné que la vérification d'assertion peut être désactivée au moment de l'exécution.

en utilisant les deux

Il est possible, cependant, d'utiliser à la fois en même temps, bien que à des fins différentes. Dans ce cas, le contrat devrait explicitement nécessite une exception illégale pour être soulevée sur certains types d'entrée. Ceci est ensuite implémenté via Apache Validate. Les invariants et les postconditions sont alors simplement affirmés, ainsi que comme préconditions supplémentaires possibles (par exemple, affectant le état de l'objet). Par exemple: xxx

Plus d'informations:

  • Bertrand Meyer, "Application de conception par contrat", Computer IEEE, 1992 ( pdf )
  • Johsua Bloch. Efficace Java , 2e éd., Point 38. Vérifiez les paramètres de validité. ( Google Books )

2 commentaires

Joshua Bloch. Java efficace , point 23: vérifier les paramètres de validité.


Point 49 en 3ème édition du livre.



2
votes

@thilo a raison pour affirmer le mot-clé, mais envisager d'assertion comme Spring Assert.

voir conditionnelFailReseXplain de GUAVA.

  • Précontion "Vous avez foiré (appelant)."
  • assertion "J'ai foiré."
  • vérification "Quelqu'un que je dépends de foiré."

0 commentaires