Convención de nomenclatura para clases de utilidad en Java


Al escribir clases de utilidad en Java, ¿cuáles son algunas buenas pautas a seguir?

¿Deben los paquetes ser "útiles" o "útiles"? ¿Es ClassUtil o ClassUtils? ¿Cuándo es una clase a "Ayudante"o una "Utilidad"? Utilidad o Utilidades? ¿O usas una mezcla de ellos?

La biblioteca estándar de Java utiliza tanto Utils como Utilidades:

    [7] javax.swing.Utilidades [7] javax.imprimir.atributo.AttributeSetUtilities [7] javax.swing.plaf.básica.BasicGraphicsUtils

Apache utiliza una variedad de Útiles y Utils, aunque en su mayoría Utils:

  • org.apache.común.modelador.útil.DomUtil
  • org.apache.común.modelador.útil.IntrospectionUtils
  • org.apache.commons.io.FileSystemUtils
  • org.apache.lucene.wordnet.AnalyzerUtil
  • org.apache.lucene.útil.ArrayUtil
  • org.apache.lucene.xmlparser.DOMUtils

Spring usa mucho Helper y Utils clases:

  • org.springframework.web.útil.UrlPathHelper
  • org.springframework.núcleo.ReflectiveVisitorHelper
  • org.springframework.núcleo.NestedExceptionUtils
  • org.springframework.útil.NumberUtils

Entonces, ¿cómo nombras tus clases de utilidad?

Author: JR., 2010-04-20

5 answers

Como muchas de estas convenciones, lo importante no es tanto qué convención usas, sino que la usas de manera consistente. Por ejemplo, si tienes tres clases de utilidad y las llamas CustomerUtil, ProductUtils y StoreUtility, otras personas que intentan usar tus clases se confundirán constantemente y escribirán CustomerUtils por error, tendrán que buscarlo, maldecirte un par de veces, etc. (Escuché una conferencia sobre consistencia una vez donde el orador puso una diapositiva mostrando un esquema de su discurso con tres puntos principales, etiquetados "1", "2nd", y "C".)

Nunca jamás hacer dos nombres que difieren solo en alguna sutileza de ortografía, como tener un CustomerUtil y un CustomerUtility. Si había una buena razón para hacer dos clases, entonces debe haber algo diferente en ellas, y el nombre debería al menos darnos una pista de cuál es esa diferencia. Si una contiene funciones de utilidad relacionadas con nombre y dirección y la otra contiene funciones de utilidad relacionadas con pedidos, llámelas CustomerNameAndAddressUtil y CustomerOrderUtil o algo así. Regularmente me vuelvo loco cuando veo diferencias sutiles sin sentido en los nombres. Como ayer estaba trabajando en un programa que tenía tres campos para los costos de flete, llamados "flete", "freightcost"y " frght". Tuve que estudiar el código para averiguar cuál era la diferencia entre ellos.

 65
Author: Jay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-20 17:01:42

No hay una regla/convención estándar en el mundo Java para esto. Sin embargo, prefiero agregar "s" al final del nombre de la clase como @colinD ha mencionado.

Eso parece bastante estándar a lo que hace El diseñador maestro de API de java Josh Bloch (colección java así como colección google)

Mientras Helper y Util vayan, llamaré Helper a algo cuando tenga API que ayuden a lograr una funcionalidad específica de un paquete (considerando un paquete como para implementar un módulo); mean while a Util se puede llamar en cualquier contexto.

Por ejemplo, en una aplicación relacionada con cuentas bancarias, todas las API estáticas de utilidad de números específicos irían a org.mycompany.util.Numbers

Todas las API de ayuda de reglas de negocio específicas de" Cuenta " irían a

org.mycompany.account.AccountHelper

Después de todo, se trata de proporcionar una mejor documentación y un código más limpio.

 24
Author: ring bearer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-07 15:31:36

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 y Executors. También es la convención utilizada en las colecciones de Google.

Cuando se trata de una clase que tiene control sobre, yo diría que los métodos de utilidad pertenecen a la clase en sí en general.

 18
Author: ColinD,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-20 16:27:48

Creo que 'utils' debería ser el nombre del paquete. Los nombres de clase deben especificar el propósito de la lógica dentro de ella. Agregar el sufix-util(s) es redundante.

 8
Author: Aito,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-20 16:15:18

Estoy bastante seguro de que las palabras "helpers" y "utilities" 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"), entonces 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 "lo que sea.WhateverUtilities".

Depende de ti, pero siempre y cuando los programadores sepan lo que eres hablando de eso, estás listo. Sin embargo, si estás haciendo esto profesionalmente como un trabajo para alguien, pregúntale cuáles son sus estándares de codificación antes de seguir mi consejo. Siempre ir con los estándares de la tienda no importa lo que le ayudará a mantener su trabajo. :-)

 3
Author: KSwift87,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-20 16:16:14