web-dev-qa-db-fra.com

Convention de dénomination des classes utilitaires dans Java

Lors de l'écriture de classes utilitaires en Java, quelles sont les bonnes directives à suivre?

Les paquets doivent-ils être "util" ou "utils"? Est-ce ClassUtil ou ClassUtils? Quand une classe est-elle un "assistant" ou un "utilitaire"? Utilitaire ou utilitaires? Ou en utilisez-vous un mélange?

La bibliothèque standard Java utilise à la fois Utils et Utilities:

  • javax.swing.Utilities
  • javax.print.attribute.AttributeSetUtilities
  • javax.swing.plaf.basic.BasicGraphicsUtils

Apache utilise une variété d'Utils et d'Utils, bien que principalement des Utils:

  • org.Apache.commons.modeler.util.DomUtil
  • org.Apache.commons.modeler.util.IntrospectionUtils
  • org.Apache.commons.io.FileSystemUtils
  • org.Apache.lucene.wordnet.AnalyzerUtil
  • org.Apache.lucene.util.ArrayUtil
  • org.Apache.lucene.xmlparser.DOMUtils

Spring utilise beaucoup de classes Helper et Utils:

  • org.springframework.web.util.UrlPathHelper
  • org.springframework.core.ReflectiveVisitorHelper
  • org.springframework.core.NestedExceptionUtils
  • org.springframework.util.NumberUtils

Alors, comment nommez-vous vos classes utilitaires?

107
JR.

Comme beaucoup de ces conventions, l'important n'est pas tant la convention que vous utilisez, que le fait de l'utiliser de manière cohérente. Par exemple, si vous avez trois classes utilitaires et que vous les appelez CustomerUtil, ProductUtils et StoreUtility, les autres personnes qui essaient d'utiliser vos classes vont constamment se tromper et taper CustomerUtils par erreur, doivent le rechercher, vous maudire plusieurs fois, etc. (J'ai entendu une fois une conférence sur la cohérence au cours de laquelle l'orateur a présenté une diapositive montrant un plan de son discours avec trois points principaux, étiquetés "1", "2e" et "C".)

Ne faites jamais jamais deux noms qui ne diffèrent que par une subtilité d'orthographe, comme avoir un CustomerUtil et un CustomerUtility. S'il y avait une bonne raison de faire deux classes, alors il doit y avoir quelque chose de différent à leur sujet, et le nom devrait au moins nous donner une idée de cette différence. Si l'un contient des fonctions utilitaires liées au nom et à l'adresse et que l'autre contient des fonctions utilitaires liées aux commandes, appelez-les CustomerNameAndAddressUtil et CustomerOrderUtil ou quelque chose du genre. Je deviens régulièrement fou quand je vois des différences subtiles sans signification dans les noms. Comme hier encore, je travaillais sur un programme qui avait trois champs pour les frais de transport, nommés "fret", "fret coût" et "frght". J'ai dû étudier le code pour comprendre quelle était la différence entre eux.

74
Jay

Il n'y a pas de règle/convention standard dans le monde Java pour cela. Cependant, je préfère ajouter "s" à la fin du nom de classe comme l'a mentionné @colinD.

Cela semble assez standard à ce que Master Java API Designer Josh Bloch le fait (Java collection ainsi que google collection)

Tant que Helper et Util disparaîtront, j'appellerai quelque chose un Helper lorsqu'il a des API qui aident à atteindre une fonctionnalité spécifique d'un package (en considérant un package comme pour implémenter un module); signifie alors qu'un Util peut être appelé dans n'importe quel contexte.

Par exemple, dans une application liée aux comptes bancaires, toutes les API statiques d'utilitaires spécifiques à un numéro iraient à org.mycompany.util.Numbers

Toutes les règles métier spécifiques aux "comptes" aidant les API iraient à

org.mycompany.account.AccountHelper

Après tout, il s'agit de fournir une meilleure documentation et un code plus propre.

27
ring bearer

J'aime la convention consistant à simplement ajouter "s" au nom du type lorsque le type est une interface ou une classe que vous ne contrôlez pas. Les exemples de cela dans le JDK incluent Collections et Executors. C'est également la convention utilisée dans Google Collections.

Lorsque vous avez affaire à une classe sur laquelle vous avez le contrôle, je dirais que les méthodes utilitaires appartiennent généralement à la classe elle-même.

20
ColinD

Je pense que "utils" devrait être le nom du paquet. Les noms de classe doivent spécifier le but de la logique à l'intérieur. L'ajout du suffixe -util (s) est redondant.

8
Aito

Je suis à peu près sûr que les mots "aides" et "utilitaires" sont utilisés de manière interchangeable. Quoi qu'il en soit, à en juger par les exemples que vous avez fournis, je dirais que si votre nom de classe est une abréviation (ou contient des abréviations comme "DomUtil"), puis appelez votre package "que ce soit. ). Sinon, si elle a un nom complet au lieu d'une abréviation, appelez-la "que ce soit. Quelles que soient les utilités".

Cela dépend vraiment de vous, mais tant que les codeurs savent de quoi vous parlez, vous êtes prêt à partir. Si vous faites cela professionnellement comme un travail pour quelqu'un, demandez-lui quelles sont ses normes de codage avant de suivre mes conseils. Respectez toujours les normes de la boutique, peu importe ce qui vous aidera à garder votre travail. :-)

3
KSwift87