Convenzioni di denominazione per file di classi parziali


93

Sto generando la maggior parte del mio codice di scaffolding ASP.NET MVC. Tutti i file generati sono classi parziali che utilizzano convenzioni di denominazione standard. Ad esempio, il mio file del controller dei dipendenti è denominato EmployeeController.cs. Se desidero estendere EmployeeController con una logica personalizzata non generata, creo un secondo file di classe parziale denominato EmployeeControllerCustom.cs. Separo la logica personalizzata e generata in due file diversi in modo che la prossima volta che genererò EmployeeController le mie modifiche personalizzate non vengano sovrascritte. L'aggiunta del suffisso "Personalizzato" al nome del file mi sembra ragionevole, ma esiste una convenzione di denominazione dei file di classe parziale più consolidata che dovrei seguire?

Risposte:


151

Uso la .separazione, ad esempio EmployeeController.SomeSpecialBehaviour.cs. Lo collego anche all'albero del progetto tramite "dependantUpon" o qualunque cosa sia nel csproj, in modo che si annidi sotto il file (in Esplora soluzioni) ordinatamente. Devi farlo a mano (modifica il csproj) o con un addin, però; per esempio:

<Compile Include="Subfolder/Program.cs" />
<Compile Include="Subfolder/Program.Foo.cs">
  <DependentUpon>Program.cs</DependentUpon> <!-- Note that I do not reference the subfolder here -->
</Compile>

appare come:

  • Sottocartella
    • Program.cs
      • Program.Foo.cs

5
Il suggerimento di DependentUpon è davvero interessante e funziona alla grande. Grazie per aver notato. Se sto leggendo correttamente, non usi semplicemente un suffisso standard come "Personalizzato". Il tuo suffisso esprime sempre l'intento della funzionalità del file di classe parziale. Inoltre, c'è un motivo per cui usi l'estensione. separazione contrapposta al rivestimento? Fa il. fornire qualcosa di più di una migliore leggibilità? Grazie.
Ben Griswold,

11
Corretto: il nome del file indica l'intento del codice in quella parte . Quindi, se sto implementando un'interfaccia esotica (e mantenendo il codice separato), potrebbe esserlo SomeType.ICustomTypeDescriptor.cs. L' .(IMO) separa le due cose: il tipo effettivo ( SomeType) e l'intento ICustomTypeDescriptor- entrambi sono già completamente con carter; inoltre, combacia perfettamente con cose come SomeForm.Designer.cs;-p
Marc Gravell

Perfetto. Grazie per ulteriori approfondimenti. Se potessi fare di più che votare la tua risposta e il voto è corretto lo farei.
Ben Griswold,

1
@ Marc Gravell: conosci per caso eventuali estensioni VS che forniscono la funzionalità di impostazione di DependentUpon per i file?
Dyppl

2
@Dyppl L' estensione FileNesting può farlo
gt

15

Per aggiungere alla risposta di Marc Gravell ♦, ho avuto una situazione con i file in una sottocartella e il DependentUponnodo veniva ignorato. In breve è che in tal caso il mio xml doveva essere:

<Compile Include="foo\bar.cs" />
<Compile Include="foo\bar.baz.cs">
    <DependentUpon>bar.cs</DependentUpon>  <!-- Note that I do not reference the subfolder here -->
</Compile>

Spero che questo aiuti qualcuno :)


anch'io. è successo perché ho iniziato il progetto in database-first e quando ha creato il modello li ha inseriti nel diagramma del modello. VS2015 se fa la differenza per qualcuno.
Joshua K
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.