Les noms de paquet doivent-ils être singuliers ou pluriels?

227

Souvent, dans les bibliothèques en particulier, les packages contiennent des classes organisées autour d'un concept unique. Exemples: xml, sql, user, config, db . Je pense que nous pensons tous assez naturellement que ces paquets sont corrects au singulier .

com.myproject. xml .Element
com.myproject. sql .Connection
com.myproject. utilisateur .utilisateur
com.myproject. utilisateur .UserFactory

Toutefois, si mon package contient en réalité une collection d'implémentations d'un seul type - telles que des tâches, des règles, des gestionnaires, des modèles, etc. , quelle est préférable?

com.myproject. tâches .TakeOutGarbageTask
com.myproject. tâches .DoTheDishesTask
com.myproject. tâches .PaintTheHouseTask

ou

com.myproject. tâche .TakeOutGarbageTask
com.myproject. tâche .DoTheDishesTask
com.myproject. tâche .PaintTheHouseTask

Nicole
la source
5
singulier, tout comme les noms de table de base de données doivent toujours être singuliers, mais pour des raisons différentes. Regardez n'importe quelle bibliothèque standard populaire telle que Java ou Python par exemple.
@ Jarrod Roberson: S'il vous plaît envoyez votre réponse en tant que réponse afin que nous puissions la relancer correctement.
S.Lott
@Jarrod aura besoin d'exemples car, dans les bibliothèques standard, la plupart des classes entrent dans la première catégorie que j'ai énumérée.
Nicole
@Renesis Regardez ma réponse mise à jour.
Matthew Rodatus
@ Matthew - J'aime ça. Vous avez exprimé ce que je soupçonnais mais je ne savais pas comment codifier.
Nicole

Réponses:

293

Utilisez le pluriel pour les packages avec un contenu homogène et le singulier pour les packages avec un contenu hétérogène.

Une classe est similaire à une relation de base de données. Une relation de base de données doit être nommée au singulier car ses enregistrements sont considérés comme des instances de la relation. La fonction d'une relation est de composer un enregistrement complexe à partir de données simples.

En revanche, un package n'est pas une abstraction de données. Il aide à l'organisation du code et à la résolution des conflits de noms. Si un paquet est nommé au singulier, cela ne signifie pas que chaque membre du paquet est une instance du paquet; il contient des concepts liés mais hétérogènes. S'il est nommé au pluriel (comme ils le sont souvent ), je suppose que le package contient des concepts homogènes.

Par exemple, un type doit être nommé à la TaskCollectionplace de TasksCollection, car il s'agit d'une collection contenant des instances d'un Task. Un package nommé com.myproject.taskne signifie pas que chaque classe contenue est une instance d'une tâche. Il pourrait y avoir un TaskHandler, un TaskFactory, etc. Un paquet nommé com.myproject.tasks, cependant, contiendrait différents types qui sont toutes les tâches: TakeOutGarbageTask, DoTheDishesTask, etc.

Matthew Rodatus
la source
13
Pour une question similaire, voir french.stackexchange.com/q/25713 . Une catégorie est analogue au singulier et un type est analogue au pluriel.
Matthew Rodatus
4
Le lien que vous avez fourni montre une exception à cette règle. beansest pluriel, mais java.beanscontient toutes les classes de types liées à JavaBeans.
SkyDan
Bonne réponse, mais je ne suis pas d'accord avec la logique de relation de base de données. Les relations dans une DRE sont singulières car elles montrent des relations entre des entités. Les tables sont une implémentation physique des relations, elles contiennent plusieurs lignes et doivent donc être au pluriel OMI. La réponse à "ce qui est dans ce tableau?" est "utilisateurs" pas "utilisateur". Certes, il semble que les noms singuliers soient plus courants dans le monde de l'entreprise (C #, Java) que dans des communautés telles que Ruby, Python, Javascript et PHP.
Ryeguy
4
Le commentaire de @ SkyDan souligne une chose très importante qui est entièrement négligée ici. Il me semble que la dénomination au pluriel de "java.beans" était en fait une erreur et qu'elle aurait plutôt dû s'appeler "java.bean", au singulier.
Vicky Chijwani
6
@VickyChijwani @SkyDan étant donné que JavaBeans ™ est une marque commerciale, ils ont probablement voulu conserver le nom tel quel pour faire référence à la technologie elle-même, et ils l'ont donc utilisée java.beans.
Hejazi
1

Cela dépend probablement d'une langue spécifique. En .NET (C #), il devrait très certainement être un pluriel si une collision de noms de type d'espace de noms est probable (l' type name expected but namespace founderreur). J'ai traité cela, ce n'est pas agréable et cela entraîne une surqualification des noms de type dans tout le code. Exemple .

Tanière
la source