web-dev-qa-db-fra.com

Les noms de package doivent-ils être au singulier ou au pluriel?

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

com.myproject .xml. Élément
com.myproject .sql. Connexion
com.myproject .tilisateur. Utilisateur
com.myproject .tilisateur. UserFactory

Cependant, si j'ai un package qui contient en fait un collection d'implémentations d'un seul type - tel que tâches, règles, gestionnaires, modèles, etc., qui 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

245
Nicole

Utilisez le pluriel pour les packages à contenu homogène et le singulier pour les packages à 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 dénomination. Si un package est nommé au singulier, cela ne signifie pas que chaque membre du package est une instance du package; il contient des concepts liés mais hétérogènes. S'il est nommé au pluriel (car ils souventsont ), je m'attendrais à ce que le package contienne des concepts homogènes.

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

314
Matthew Rodatus

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

1
Den