2012-01-23 15 views
6

En pocas palabras, ¿es una buena idea nombrar colecciones y objetos compuestos usando pluralidad?¿Es una buena práctica usar pluralidad para nombrar colecciones?

class PandaBears { 
    PandaBear[] bears; 

    class PandaBear { 
    } 
} 

Mi preocupación es que los nombres de las clases son bastante similares. Por otro lado, PandaBearList revela la implementación, pero es más fácil de distinguir.

+0

No sé si es una buena práctica o no. Pero no me gusta usar plurales. Yo usaría 'PandaBearCollection'. – atoMerz

+0

IMO, si tengo algunos métodos especiales (como devolver algunos elementos con valores específicos, etc.) o si quiero una API estricta con solo los métodos que permita que el usuario use con la colección; de lo contrario, volvería a utilizar Collection, List o Set (java). – Genzer

+1

Prefiero nombres conceptuales. ¿Cuál es el papel de tu clase exterior? Piense en su propósito y elija un nombre apropiado. PandaBearForest? PandaBearMom? PandaBearCage? PandaBearGroup? Tal vez no necesites la clase externa en absoluto. –

Respuesta

2

Preferiría PandaBearCollection. Un nombre de clase que sea un nombre contable simplemente concuerda mejor con la metáfora fundamental de OOP, un "objeto".

Por ejemplo, intente describir la firma de las dos funciones siguientes:

void func(PandaBearCollection collection1, PandaBearCollection collection2); 
void func(PandaBears pandaBears1, PandaBears pandaBears2); 

La primera sería naturalmente: "una función que toma dos colecciones de osos panda".

¿Cuál sería el segundo? "Una función que lleva dos osos panda"? No, simplemente no funciona.

+0

Buen punto, pensé que la pluralidad podría leer mejor, pero es confuso cuando se habla de clases y objetos. –

1

Evitaría la pluralidad.

Si no desea incluir el sufijo List, siempre puede usar el sufijo Collection que es una convención estándar y no revela los detalles de implementación. Por supuesto, esto depende del idioma que está utilizando.

También hay una solución específica de C# que me gusta usar si la estructura no es muy compleja. Puede evitar crear la clase Collection, declarando todos los métodos como métodos de extensión del IEnumerable<T> relacionado. Entonces, en este caso, puede declarar métodos de extensión en IEnumerable<PandaBear>, siempre que su colección no tenga otras variables privadas.

1

Prefiero utilizar la pluralidad porque, como mencionas, no indica la implementación, que podría cambiar fácilmente en el futuro. Otra consideración sobre la convención de nomenclatura es si está utilizando un ORM y qué tipo de convención utilizará cuando traduzca su esquema de base de datos, como discussed here. Probablemente obtendrá muchos consejos en ambos sentidos. Creo que lo más importante es que elijas una convención que funcione para ti y para tu equipo y te apegues a ella.

Cuestiones relacionadas