2012-01-23 13 views
6

In poche parole, è una buona idea denominare le raccolte e gli oggetti compositi usando la pluralità?È buona pratica usare la pluralità per denominare le raccolte?

class PandaBears { 
    PandaBear[] bears; 

    class PandaBear { 
    } 
} 

La mia preoccupazione è che i nomi delle classi siano abbastanza simili. D'altra parte, PandaBearList rivela l'implementazione, ma è più facilmente distinguibile.

+0

Non so se sia una buona pratica o no. Ma non mi piace usare i plurali. Io userei 'PandaBearCollection'. – atoMerz

+0

IMO, se ho alcuni metodi speciali (come restituire alcuni elementi con valori specifici, ecc.) O voglio un'API rigorosa con solo metodi che permetto all'utente di usare con la raccolta, altrimenti, riutilizzerei Raccolta, Lista o Set (java). – Genzer

+1

Preferisco i nomi concettuali. Qual è il ruolo della tua classe esterna? Pensa al suo scopo e scegli un nome appropriato. PandaBearForest? PandaBearMom? PandaBearCage? PandaBearGroup? Forse non hai affatto bisogno della classe esterna. –

risposta

2

Preferirei PandaBearCollection. Un nome di classe che è un sostantivo numerabile si accorda meglio con la metafora fondamentale di OOP, un "oggetto".

Ad esempio, provate descrivendo la firma dei seguenti due funzioni:

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

Il primo sarebbe naturalmente: "Una funzione che prende due collezioni di panda".

Quale sarebbe il secondo? "Una funzione che richiede due panda orsi"? No, semplicemente non funziona.

+0

Buon punto, pensavo che la pluralità avrebbe letto meglio, ma è confusa quando si parla di classi e oggetti. –

1

Eviterei la pluralità.

Se non si desidera includere il suffisso List, è sempre possibile utilizzare il suffisso Collection che è una convenzione standard e non rivela i dettagli dell'implementazione. Ovviamente ciò dipende dalla lingua che stai usando.

C'è anche un work-around specifico C# che mi piace usare se la struttura non è molto complessa. È possibile evitare di creare la classe Collection, dichiarando tutti i metodi come metodi di estensione del relativo IEnumerable<T>. Quindi, in questo caso, potresti dichiarare i metodi di estensione su IEnumerable<PandaBear>, a condizione che la tua raccolta non abbia altre variabili private.

1

Preferisco usare la pluralità perché, come dici tu, non indica l'implementazione, che potrebbe facilmente cambiare in futuro. Un'altra considerazione sulla convenzione di denominazione è se si sta utilizzando un ORM e quale tipo di convenzione verrà utilizzato durante la conversione dello schema del database, come discussed here. Probabilmente riceverai molti consigli in entrambi i modi. Penso che ciò che è più importante sia che tu scelga una convenzione che funzioni per te e il tuo team e che tu la segua.

Problemi correlati