Jaka konwencja nazewnictwa dla pliku C # zawierającego wiele klas?

20

W projektach C # często grupujemy małe i ściśle powiązane klasy w ten sam .csplik. Ta praktyka zmniejsza tarcie związane z obsługą niezliczonych plików, które nie zawierają prawie żadnego kodu. Ale czy istnieje ustalona praktyka nazywania pliku zawierającego wiele klas?

Joannes Vermorel
źródło
13
szczerze mówiąc wolę jedną klasę jednej klasy nawet dla bardzo małych klas
Felice Pollano,
Możesz nazwać go według grupy, do której należą te ściśle powiązane klasy.
V4Vendetta
Może te klasy są za małe? Osobiście grupuję tylko wiele wyliczeń w jednym pliku (czasem z klasą, czasem wszystkie wyliczenia razem, w zależności od kontekstu).
Konrad Morawski
@ Felice: spójrz na MSpec :)
Bryan Boettcher,

Odpowiedzi:

18

Moja rada: unikaj plików zawierających wiele klas i plików nazw == klas, nawet jeśli masz na myśli, że plików jest zbyt wiele. Spróbuj uporządkować je w folderach. W bardzo szczególnych przypadkach możesz mieć zagnieżdżone klasy. W takim przypadku sensowne jest rozdzielenie klasy głównej i klasy zagnieżdżonej na różne pliki mające jedną klasę częściową. W tym przypadku używam następującej konwencji nazewnictwa.

MyEnumerable.cs
MyEnumerable.MyEnumerator.cs

Prawdopodobnie w twoim przypadku możesz także użyć nazw plików wieloczęściowych.

George Mamaladze
źródło
4
Jeszcze jeden pomysł. Możesz pogrupować wiele plików .cs w programie Visual Studio Project, tak aby wszystkie pojawiały się w tym samym węźle drzewa (np. Pliki .Designer.cs). To zasygnalizuje, że klasy ściśle do siebie pasują.
4

Zastanów się, że zadając pytanie, jak nazwać takie pliki, zidentyfikowałeś już problem z zapachem kodu, a problem ten nie zniknie łatwo.

Niezależnie od uzasadnienia przekonasz się, że trudno jest wybrać rozsądne nazwy, gdy masz więcej niż jedną klasę w pliku, ponieważ nawet jeśli pliki są w jakiś sposób powiązane, zawsze będzie pokusa, aby wrzucić coś, co nie pasuje do nazwy grupy, którą przypisujesz do zestawu klas.

Krótka odpowiedź brzmi zatem, że nie ma uznanego ani ustalonego standardu nazewnictwa tego rodzaju plików. Moją sugestią byłoby usiąść ze swoim zespołem i zajrzeć do organizacji kodu, i włożyć trochę wysiłku refaktoryzacyjnego, aby trochę uporządkować.

Jednak, aby trochę zacząć, pytam, czy dodatkowe klasy są zagnieżdżone, czy niezależne. Jeśli są niezależne, wówczas klasy te można łatwiej podzielić na własne pliki, w których każdy plik zawiera nazwę jednej klasy. W przypadku zagnieżdżenia konieczne może być podjęcie dalszych decyzji dotyczących sposobu zorganizowania takich klas, jednak zagnieżdżone klasy mogą nie wymagać natychmiastowego usunięcia, dlatego pliki zostałyby nazwane dla klasy najbardziej zewnętrznej. Jeśli chodzi o zagnieżdżanie, istnieje wiele argumentów przeciwko i kilka rozsądnych argumentów za zagnieżdżaniem w pewnych okolicznościach, a moją radą byłoby zapytać, czy rozsądna przestrzeń nazw i stworzenie bardziej zorganizowanej struktury kodu źródłowego może być lepszym sposobem rozwiązania problem.

Jednak realistycznie przekonasz się, że pod koniec życia projektu będziesz żałował, że wszystkie twoje pliki nie zawierają tylko jednej klasy i ładnej struktury katalogu / przestrzeni nazw.

Twoje zdrowie,

S.Robins
źródło
3

Kiedyś byłem za posiadaniem wielu klas w jednym pliku, ale odkąd zacząłem faktycznie pracować jako programista (a nie samodzielnie), odkryłem, że może to być koszmar konserwacji z wieloma klasami w jednym pliku. Chociaż, co prawda, Visual Studio może bardzo pomóc, używając F12 (przejdź do definicji).

Zacząłem używać konwencji nazewnictwa w następujący sposób: namespace.classname.cs W ten sposób wiem dokładnie, co jest w każdym pliku, a także zapewnia pewien ogólny kontekst pliku. Jeśli klasa będzie w domyślnej przestrzeni nazw, to idę dalej i po prostu używam classname.cs (podobnie jak Java).

Jetti
źródło