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
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.
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 .