Nomenclatura de clases: singular o plural? [cerrado]

58

Siempre es difícil para mí elegir entre formas singulares y plurales para nombres de clases:

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

Y para los nombres compuestos es aún más difícil:

OrderCustomerRepository vs. OrderCustomersRepository vs. OrdersCustomersRepository

¿Qué enfoque prefieres y por qué?

SiberianGuy
fuente
¿La clase contendría un repositorio para múltiples clientes? Si es un repositorio para un cliente ...
JeffO
2
@Jeff O, el repositorio puede contener métodos GetCustomerById y GetCustomers al mismo tiempo
SiberianGuy
2
En el modelado de datos, el nombre de una tabla debe ser singular. Si su aplicación está utilizando clases de dominio que corresponden 1-1 a su modelo de datos, entonces puede ser una buena idea mantener el nombre en singular. Por supuesto, mapear las clases a las tablas de la manera 1-1 puede no ser la mejor manera de construir su modelo de objetos para una aplicación OO, pero esto no viene al caso.
NoChance

Respuestas:

73

Lo único que pluralizo son las colecciones.

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

Todos sus ejemplos son objetos individuales, por lo que no están pluralizados. Sí, los nombres se refieren a objetos que pueden tener varias instancias, pero todo lo que necesita saber en el nombre es la entidad del objeto (es decir, el cliente).

Entonces, en todos sus ejemplos, el singular es la forma correcta. Hace la vida mucho más fácil.

Robert Harvey
fuente
2
Lo usaría customerCollectionpara colecciones, pero por el resto estoy de acuerdo. Esta es una práctica recomendada en el diseño de bases de datos y también funciona bastante bien en código.
Jan_V
12
No me gustan las palabras como "Colección" aquí. El inglés tiene una forma perfectamente buena de referirse a una colección de cosas, usando plurales.
Gort the Robot
En lugar de Collection¿qué tal Iterator?
Julian
@Julian An Iteratorsería algún tipo de co-rutina en lugar de una estructura de datos para mantener múltiples objetos, ¿verdad?
Wilson
64

Use singular. La herramienta para girar los tornillos se llama "destornillador" y no "destornillador".

Sin embargo, pluralice sus métodos y nombres de propiedades en consecuencia, para indicar si se devolverá un valor o una colección de ellos.

back2dos
fuente
7

Definitivamente singular. No creas un objeto People, creas una colección de Personobjetos. La única vez que usaría plurales sería para clases estáticas, es decir SupportServices, StringUtilsetc. Sin embargo, en este caso, la clase actúa más como un espacio de nombres que cualquier otra cosa.

Robar
fuente
1
Y para pensar, ¡todo este tiempo he estado usando colecciones de Peoples!
Jordania
2
Listar <persona> personas ... me parece bien, @Jordan.
StevenV
1

Recuerde, una clase es una plantilla para un objeto. Entonces piense en el objeto al que se refiere.

A menudo es una entidad singular, especialmente cuando es una entidad ORM. A veces podría ser una colección.

Creo que la respuesta es específica del contexto.

indi
fuente