Quale convenzione di denominazione per il file C # che contiene più classi?


20

Nei progetti C #, spesso raggruppiamo classi piccole e strettamente correlate nello stesso .csfile. Questa pratica riduce l'attrito nel gestire una miriade di file che contengono quasi nessun codice reale. Tuttavia, esiste una pratica consolidata per nominare il file che contiene più classi?


13
francamente preferisco un file di una classe anche per classi molto piccole
Felice Pollano,

Puoi scegliere di nominarlo secondo il gruppo nel quale rientrano queste classi strettamente correlate.
V4Vendetta,

Forse quelle classi SONO troppo piccole? Personalmente raggruppo più enum in un unico file (a volte con la classe, a volte tutti gli enum insieme, a seconda del contesto).
Konrad Morawski,

@Felice: guarda MSpec :)
Bryan Boettcher,

Risposte:


18

Il mio consiglio: evita i file che contengono più classi e nome file == classi anche se intendi che ci sono troppi file. Cerca di organizzarli in cartelle. In casi molto speciali potresti avere classi nidificate. In questo caso ha senso separare la classe principale e una classe nidificata in file diversi con una classe parziale. In questo caso utilizzo la seguente convenzione di denominazione.

MyEnumerable.cs
MyEnumerable.MyEnumerator.cs

Probabilmente puoi anche usare nomi di file multipart nel tuo caso.


4
Un'altra idea. È possibile raggruppare più file .cs in Visual Studio Project in modo che appaiano tutti sotto lo stesso nodo nella struttura ad albero (come i file .Designer.cs). Questo ti segnalerà che le classi sono strettamente legate.


4

Considera che ponendo una domanda su come nominare tali file, hai già identificato un odore di codice che è problematico per te, e questo è un problema che non andrà via facilmente.

Indipendentemente dal ragionamento, scoprirai che è difficile scegliere nomi sensibili quando hai più di una classe in un file, perché anche se i file sono correlati in qualche modo, ci sarà sempre la tentazione di gettare qualcosa che non si adatta perfettamente al nome del gruppo assegnato a un set di classi.

La risposta breve è quindi che non esiste uno standard riconosciuto o stabilito per la denominazione di questo tipo di file. Il mio suggerimento sarebbe di sedermi con il tuo team e guardare all'organizzazione del tuo codice e applicare un po 'di sforzo di refactoring per mettere in ordine le cose un po'.

Tuttavia, per rendere le cose un po 'più facili per cominciare, chiederei se le classi aggiuntive sono nidificate o indipendenti. Se indipendenti, queste classi possono essere suddivise più facilmente nei propri file, con ogni file denominato per la singola classe contenuta all'interno. Se nidificato, potrebbe essere necessario prendere ulteriori decisioni su come organizzare tali classi, tuttavia potrebbe non essere necessario rimuovere immediatamente le classi nidificate e pertanto i file verrebbero nominati per la classe più esterna. Per quanto riguarda l'annidamento, ci sono molti argomenti contrari e alcuni ragionevoli per l'annidamento in alcune circostanze, e il mio consiglio sarebbe di chiedere se uno spazio dei nomi sensato e la creazione di una struttura di codice sorgente più organizzata potrebbe essere un modo migliore per affrontare il problema.

Realisticamente, tuttavia, scoprirai che entro la fine della vita del tuo progetto, avrai desiderato che tutti i tuoi file contenessero solo una singola classe e una bella struttura di directory / namespace.

Saluti,


3

Ero solito avere più classi in un unico file, ma da quando ho iniziato a lavorare come programmatore (piuttosto che essere da solo), ho scoperto che può essere un incubo di manutenzione con molte classi in un singolo file. Anche se, certamente, Visual Studio può essere di grande aiuto usando F12 (vai alla definizione).

Quello che ho iniziato a fare è usare una convenzione di denominazione come segue: namespace.classname.cs In questo modo so esattamente cosa c'è in ogni file e fornisce anche una sorta di contesto generale del file. Se la classe si troverà nello spazio dei nomi predefinito, allora vado avanti e uso solo classname.cs (simile a Java).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.