Яка умова іменування для файлу C #, який містить кілька класів?


20

У проектах C # ми часто групуємо невеликі та тісно пов’язані класи в одному .csфайлі. Ця практика зменшує тертя роботи з безліччю файлів, що містять близько не фактичний код. Але чи існує усталена практика називати файл, який містить кілька класів?


13
відверто кажучи, я віддаю перевагу одному файлу одного класу навіть для дуже малих класів
Felice Pollano

Ви можете назвати його відповідно до групи, до якої належать тісно пов’язані класи.
V4Vendetta

Може бути, ці заняття занадто малі? Особисто я групую лише кілька перерахунків в одному файлі (іноді з класом, іноді всі перераховуються разом, залежно від контексту).
Конрад Моравський

@Felice: подивіться на MSpec :)
Брайан Ботчер

Відповіді:


18

Моя порада: уникайте файлів, що містять кілька класів та файлів імен == класів, навіть якщо ви маєте на увазі, що файлів занадто багато. Спробуйте впорядкувати їх у папках. У дуже особливих випадках у вас можуть бути вкладені класи. У цьому випадку має сенс розділити основний клас і вкладений клас на різні файли, що мають один частковий клас. У цьому випадку я використовую наступну конвенцію про іменування.

MyEnumerable.cs
MyEnumerable.MyEnumerator.cs

Ймовірно, ви також можете використовувати імена файлів з кількома частинами у вашому випадку.


4
Ще одна ідея. Ви можете згрупувати кілька файлів .cs всередині Visual Studio Project, щоб усі вони відображалися під одним вузлом у дереві (наприклад, файли .Designer.cs). Це буде сигналізувати про те, що класи щільно належать разом.

6

Намагайтеся уникати наявності у файлі більше одного класу, але не більше одного загальнодоступного класу. Під час іменування файлів класів у кількох класах вибирайте описову назву файлу.

Відгуки:


4

Подумайте, що задаючи питання про те, як називати такі файли, ви вже визначили запах коду, який для вас проблематичний, і це проблема, яка не піде легко.

Незалежно від міркувань, ви побачите, що важко вибрати розумні імена, коли у вас є один клас у файлі, тому що навіть якщо файли пов’язані якимось чином, завжди буде спокуса кинути щось, що не зовсім відповідає назві групи, яку ви присвоюєте набору класів.

Отже, коротка відповідь полягає в тому, що не існує визнаного або встановленого стандарту для іменування таких типів файлів. Моя пропозиція буде сісти з вашою командою і поглянути на організацію вашого коду, і прикласти трохи зусиль для рефакторингу, щоб трохи привести в порядок речі.

Однак, щоб трохи полегшити все, я б поцікавився, чи додаткові класи вкладені, чи незалежні. Якщо незалежні, то ці класи можна легше розділити на власні файли, при цьому кожен файл буде названий для одного класу, що міститься в ньому. Якщо вони вкладені, можливо, потрібно буде прийняти подальші рішення щодо того, як такі класи мають бути організовані, проте вкладені класи, можливо, не потрібно буде видаляти негайно, і файли, таким чином, будуть названі самим віддаленим класом. Що стосується гніздування, то існує безліч аргументів проти, і кілька обґрунтованих для гніздування за певних обставин, і моя порада буде запитати, чи розумний проміжок імен та створення більш організованої структури вихідного коду може бути кращим способом вирішити. проблема.

Однак реально ви побачите, що до кінця життя вашого проекту ви хотіли б, щоб ваші файли містили лише один клас та гарну структуру каталогу / простору імен.

Ура,


3

У мене колись було багато класів в одному файлі, але з тих пір, як я почав працювати програмістом (а не бути власним), я виявив, що це може бути кошмаром технічного обслуговування з багатьма класами в одному файлі. Хоча, правда, Visual Studio може багато допомогти, використовуючи F12 (перейти до визначення).

Що я почав робити, це використовувати конвенцію про іменування таким чином: namespace.classname.cs Таким чином я точно знаю, що є у кожному файлі, і це також забезпечує певний загальний контекст файлу. Якщо клас буде знаходитись у просторі імен за замовчуванням, то я продовжую і просто використовую classname.cs (подібно до Java).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.