¿Deben los nombres de los paquetes ser singulares o plurales?

227

A menudo, especialmente en las bibliotecas, los paquetes contienen clases que se organizan en torno a un concepto único. Ejemplos: xml, sql, user, config, db . Creo que todos sentimos, naturalmente, que estos paquetes son correctos en singular .

com.myproject. xml .Element
com.myproject. sql .Connection
com.myproject. user .User
com.myproject. usuario .UserFactory

Sin embargo, si tengo un paquete que realmente contiene una colección de implementaciones de un solo tipo , como tareas, reglas, controladores, modelos, etc. , ¿cuál es preferible?

com.myproject. tareas .TakeOutGarbageTask
com.myproject. tareas .DoTheDishesTask
com.myproject. tareas .PaintTheHouseTask

o

com.myproject. tarea .TakeOutGarbageTask
com.myproject. tarea .DoTheDishesTask
com.myproject. tarea .PaintTheHouseTask

Nicole
fuente
55
singular al igual que los nombres de tablas de bases de datos siempre deben ser singulares pero por diferentes razones Mire cualquier biblioteca estándar popular como Java o Python, por ejemplo.
@Jarrod Roberson: publique su respuesta como respuesta para que podamos votarla correctamente.
S.Lott
@Jarrod necesitará algunos ejemplos, ya que en las bibliotecas estándar la mayoría de las clases caen en la primera categoría que enumeré.
Nicole
@Renesis Echa un vistazo a mi respuesta actualizada.
Matthew Rodatus
@Matthew: me gusta. Has expresado lo que sospechaba pero no estaba seguro de cómo codificar.
Nicole

Respuestas:

293

Use el plural para paquetes con contenido homogéneo y el singular para paquetes con contenido heterogéneo.

Una clase es similar a una relación de base de datos. Una relación de base de datos debe nombrarse en singular ya que sus registros se consideran instancias de la relación. La función de una relación es componer un registro complejo a partir de datos simples.

Un paquete, por otro lado, no es una abstracción de datos. Ayuda con la organización del código y la resolución de conflictos de nombres. Si un paquete se nombra en singular, no significa que cada miembro del paquete sea una instancia del paquete; Contiene conceptos relacionados pero heterogéneos. Si se nombra en plural (como a menudo lo son ), esperaría que el paquete contenga conceptos homogéneos.

Por ejemplo, se debe nombrar un tipo en TaskCollectionlugar de TasksCollection, ya que es una colección que contiene instancias de a Task. Un paquete denominado com.myproject.taskno significa que cada clase contenida sea una instancia de una tarea. Puede haber un TaskHandler, una TaskFactory, etc. Un paquete llamado com.myproject.tasks, sin embargo, contendría diferentes tipos que son todas las tareas: TakeOutGarbageTask, DoTheDishesTask, etc.

Matthew Rodatus
fuente
13
Para una pregunta similar, visite english.stackexchange.com/q/25713 . Una categoría es análoga al singular y un tipo es análogo al plural.
Matthew Rodatus
44
El mismo enlace que proporcionó muestra una excepción a esta regla. beanses plural, sin embargo, java.beanscontiene todas las clases de tipo relacionadas con JavaBeans.
SkyDan
Buena respuesta, pero no estoy de acuerdo con la lógica de relación de la base de datos. Las relaciones en un ERD son singulares porque muestran relaciones entre entidades. Las tablas son una implementación física de las relaciones, y contienen varias filas, y por lo tanto deberían ser plurales IMO. La respuesta a "¿qué hay en esta tabla?" es "usuarios", no "usuario". Por supuesto, parece que la denominación singular es más común en el mundo empresarial (C #, Java) que en comunidades como Ruby, Python, Javascript y PHP.
ryeguy
44
El comentario de @ SkyDan señala algo muy importante que se está pasando por alto por completo aquí. Me parece que la denominación plural de "java.beans" fue en realidad un error, y en su lugar debería haberse llamado "java.bean", singular.
Vicky Chijwani
66
@VickyChijwani @SkyDan ya que JavaBeans ™ es una marca registrada, probablemente querían mantener el nombre tal como está para referirse a la tecnología en sí, y por lo tanto lo usaron java.beans.
Hejazi
1

Esto probablemente depende de un idioma específico. En .NET (C #) definitivamente debería ser un plural si es probable una colisión de nombres de tipo de espacio de nombres (el type name expected but namespace founderror). He tratado con esto, no es agradable y da como resultado nombres de tipo sobrecalificados en todo el código. Ejemplo .

Guarida
fuente