Nom des classes: singulier ou pluriel? [fermé]

58

Il m'est toujours difficile de choisir entre des formes singulières et plurielles pour les noms de classes:

CustomerRepository vs. CustomersRepository
CustomerService vs. CustomersService
CustomerController vs. CustomersController

Et pour les noms composites, c'est encore plus difficile:

OrderCustomerRepository vs OrderCustomersRepository vs OrdersCustomersRepository

Quelle approche préférez-vous et pourquoi?

SibérienGuy
la source
La classe contiendrait-elle un référentiel pour plusieurs clients? S'il s'agit d'un référentiel pour un client ...
JeffO
2
@ Jeff O, le référentiel peut contenir les méthodes GetCustomerById et GetCustomers simultanément
SiberianGuy
2
Dans la modélisation des données, un nom de table doit être singulier. Si votre application utilise des classes de domaine qui correspondent 1-1 à votre modèle de données, il peut être judicieux de conserver le nom au singulier. Bien sûr, le mappage des classes sur des tables de manière 1-1 n'est peut-être pas le meilleur moyen de créer votre modèle d'objet pour une application OO, mais cela ne concerne pas la question.
NoChance

Réponses:

73

La seule chose que je pluralise, ce sont les collections.

foreach (var customer in customers)
{
    // do something with customer
}

Tous vos exemples sont des objets individuels, ils ne sont donc pas pluralisés. Oui, les noms font référence à des objets pouvant avoir plusieurs instances, mais tout ce que vous devez savoir dans le nom est l'entité d'objet (c.-à-d. Le client).

Donc, dans tous vos exemples, le singulier est la forme correcte. Rend la vie beaucoup plus facile.

Robert Harvey
la source
2
J'utiliserais customerCollectionpour les collections, mais pour le reste, je suis d'accord. C'est une pratique exemplaire en matière de conception de base de données et fonctionne également très bien en code.
Jan_V
12
Je n'aime pas les mots comme "Collection" ici. L'anglais a parfaitement raison de faire référence à une collection de choses en utilisant le pluriel.
Gort le robot
Au lieu de Collectionquoi Iterator?
Julian
@ Julian An Iteratorserait une sorte de co-routine plutôt qu'une structure de données pour contenir plusieurs objets, non?
Wilson
64

Utilisez singulier. L’outil pour tourner les vis avec est appelé "tournevis" et non pas "tournevis".

Cependant, pluralisez vos noms de méthode et de propriété en conséquence, pour indiquer si une valeur ou une collection d'entre elles sera renvoyée.

back2dos
la source
7

Vraiment singulier. Vous ne créez pas d'objet de People, vous créez une collection d' Personobjets. La seule fois où j'utiliserais des pluriels serait pour des classes statiques, c'est-à-dire SupportServices, StringUtilsetc. Cependant, dans ce cas, la classe agit plus comme un espace de noms qu'autre chose.

Rob
la source
1
Et je pense que depuis tout ce temps, j'utilise les collections Peoples!
Jordanie
2
Lister <personne> ... semble me convenir, @Jordan.
StevenV
1

Rappelez-vous qu'une classe est un modèle pour un objet. Alors pensez à l'objet auquel vous faites référence.

C'est souvent une entité singulière, surtout lorsqu'il s'agit d'une entité ORM. Parfois, cela pourrait être une collection.

Je crois que la réponse est spécifique au contexte.

indi
la source