Classi, enumerazioni e altre entità devono essere inseriti in file separati?


12

Il team leader della mia azienda \ architetto sostiene che un progetto su larga scala è più facile da capire se le "entità connesse dalla logica" sono inserite in un file .cs.

Quoto:

  • "L'intera struttura della logica, dell'interfaccia e della classe può essere vista in un unico posto, questo è un argomento che non può essere confutato. Per vedere la stessa cosa ma con un mucchio di file devi usare gli strumenti, la classe diagramma, R # per la navigazione, ecc. "

  • "Seguendo la povera teoria potrei urlare che un esercito di file separati è bello, ma quando si tratta di apportare modifiche al codice esistente, specialmente se non si è scrittori di questo codice, è molto difficile capire un sacco di file sparsi. Quindi nei forum puoi scrivere "un solo enum- un file", ma in pratica questo approccio non dovrebbe mai essere usato "

  • "... Per quanto riguarda la separazione della base di codice tra gli sviluppatori, al giorno d'oggi non è un problema modificare contemporaneamente lo stesso file. L'unione non è un problema."

Ho sentito e letto molte volte che dobbiamo creare un file .cs per enum, classe e così via e questa è la migliore pratica.

Ma non riesco a convincerlo. Dice che non si fida di programmatori noti come Jon Skeet. A proposito, ecco l'opinione di Skeet su questo argomento: dov'è il posto migliore per individuare i tipi di enum?

Cosa pensi? C'è un vero problema? O è una questione di gusti e dovrebbe essere regolata dallo standard di codifica dell'organizzazione?


Non puoi vincerli tutti, anche quando giochi la Skeet Card.
JeffO

6
In tutta onestà, la richiesta di fama di Jon Skeet non è quella di essere un eccellente artigiano del codice, ma di essere disposto e in grado di rispondere alle domande C # in modo rapido e preciso (e ha letteralmente scritto il libro). E forse non dormirà mai, anche se questa è solo una voce. La sua opinione su questo da solo non dovrebbe essere sufficiente e la sua argomentazione non è forte. Ciò non significa che si sbagli in questo caso, sto solo dicendo che il tuo anziano ha il diritto di dire "vieni da me con fatti e ragioni, non opinioni".
pdr

2
Io voto per una classe per file, e tutti gli enum o interfacce che sono rilevanti solo per quella classe dovrebbero essere all'interno della classe, non solo all'interno del file. D'altra parte, dovresti seguire lo standard di codifica dell'azienda, non importa quanto sia irragionevole, perché fa parte della scrittura di un buon codice per il tuo lavoro .
Bobson,

2
È possibile sottolineare che StyleCop come plug-in di Visual Studio contiene avvisi se esiste> 1 classe per file
Kevin

Risposte:


20

Ci sono un paio di difetti nell'argomento del tuo Team Lead:

  1. Classi ed enumerazioni ben progettate sono pensate per essere utilizzate ovunque nel tuo progetto, non solo dove logicamente possono avere senso.

  2. Classi ed enumerazioni che sono adeguatamente documentate con commenti XML sono molto auto-descrittive, semplicemente passando il mouse sopra l'elemento che lo fa riferimento.

  3. Puoi sempre arrivare a una definizione di classe o enum facendo clic con il tasto destro del mouse sul riferimento e selezionando "Vai a definizione", quindi non dovrebbe importare dove l' hai inserito.

  4. Mettere insieme gli oggetti in modo "logico" è arbitrario (cioè devi pensare a cosa significhi "logico". Preferirei spendere quei cicli di clock per fare una vera programmazione).

L'impostazione di ogni definizione di oggetto nel suo file crea un'aspettativa uniforme e disciplinata di organizzazione e struttura e non pone domande come "perché è qui?" È una cosa molto bella da avere.

Se due o più oggetti sono logicamente correlati, è sufficiente inserirli nella propria cartella in Esplora progetti.


5
In un'altra nota, le fusioni di codice fanno schifo. Certo, puoi farli, ma perché, se non devi?
Robert Harvey,

4

Molto probabilmente il team leader si è tagliato i denti in un'epoca precedente quando il clic destro e la scelta di "vai alla definizione" non era un'opzione. So che quando sono in modalità di sviluppo con picchi pesanti, farò crescere file di classe piuttosto massicci fino a quando non permetterò a Resharper di risolverlo per me.

In ogni caso, se si desidera assumere la responsabilità del team, chiedergli perché queste classi ed enumerazioni non sono classi secondarie ed enumerazioni - nessun motivo per dichiararle come entità indipendenti se sono entità veramente dipendenti. Questo potrebbe aiutarlo a pensare un po 'alla fatwa.

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.