Al escribir clases de utilidad en Java, ¿cuáles son algunas buenas pautas a seguir?
¿Deben ser los paquetes "util" o "utils"? ¿Es ClassUtil o ClassUtils? ¿Cuándo es una clase un "ayudante" o una "utilidad"? ¿Utilidad o utilidades? ¿O usas una mezcla de ellos?
La biblioteca estándar de Java utiliza utilidades y utilidades:
- javax.swing.Utilities
- javax.print.attribute.AttributeSetUtilities
- javax.swing.plaf.basic.BasicGraphicsUtils
Apache usa una variedad de Util y Utils, aunque principalmente 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 usa muchas clases Helper y Utils:
- org.springframework.web.util.UrlPathHelper
- org.springframework.core.ReflectiveVisitorHelper
- org.springframework.core.NestedExceptionUtils
- org.springframework.util.NumberUtils
Entonces, ¿cómo nombras tus clases de servicios públicos?
No existe una regla / convención estándar en el mundo de Java para esto. Sin embargo, prefiero agregar "s" al final del nombre de la clase, como ha mencionado @colinD.
Eso parece bastante estándar para lo que hace el diseñador maestro de API de Java, Josh Bloch (colección de Java y colección de Google)
Mientras Helper y Util vayan, llamaré a algo Helper cuando tenga API que ayuden a lograr una funcionalidad específica de un paquete (considerando un paquete como para implementar un módulo); es decir, mientras que una Util se puede llamar en cualquier contexto.
Por ejemplo, en una aplicación relacionada con cuentas bancarias, todas las API estáticas de servicios públicos específicos del número irían a
org.mycompany.util.Numbers
Todas las API de ayuda de reglas de negocio específicas de "Cuenta" irían a
Después de todo, se trata de proporcionar una mejor documentación y un código más limpio.
fuente
Me gusta la convención de simplemente agregar "s" al nombre del tipo cuando el tipo es una interfaz o una clase que no controlas. Ejemplos de eso en el JDK incluyen
Collections
yExecutors
. También es la convención utilizada en las colecciones de Google.Cuando se trata de una clase sobre la que tiene control, yo diría que los métodos de utilidad pertenecen a la clase misma en general.
fuente
Creo que 'utils' debería ser el nombre del paquete. Los nombres de las clases deben especificar el propósito de la lógica dentro de ellos. Agregar el sufijo -util (s) es redundante.
fuente
tld.organization.app.util
paquete no debería existir (podría, pero no debería), cualquier número detld.organization.app.feature.util
paquetes está perfectamente bien.Estoy bastante seguro de que las palabras "ayudantes" y "utilidades" se usan indistintamente. De todos modos, a juzgar por los ejemplos que proporcionó, diría que si su nombre de clase es una abreviatura (o tiene abreviaturas como "DomUtil"), llame a su paquete "lo que sea.WhateverUtil" (o Utils si hay más de una utilidad en su paquete ). De lo contrario, si tiene un nombre completo en lugar de una abreviatura, llámelo "cualquiera. Cualquiera que sea la utilidad".
Realmente depende de usted, pero mientras los programadores sepan de lo que está hablando, está listo para comenzar. Sin embargo, si está haciendo esto profesionalmente como un trabajo para alguien, pregúntele cuáles son sus estándares de codificación antes de seguir mi consejo. Siga siempre los estándares del taller, pase lo que pase, ya que eso le ayudará a mantener su trabajo. :-)
fuente