Какое соглашение об именах для C # файла, который содержит несколько классов?

20

В проектах C # мы часто группируем небольшие и тесно связанные классы в один и тот же .csфайл. Эта практика уменьшает трения при работе с множеством файлов, содержащих практически полный код. Тем не менее, существует ли устоявшаяся практика именовать файл , содержащий несколько классов?

Джоанн Верморел
источник
13
Честно
Вы можете назвать его в соответствии с группой, к которой относятся эти тесно связанные классы.
V4Vendetta
Может быть, эти классы слишком малы? Лично я объединяю несколько перечислений в один файл (иногда с классом, иногда все перечисления вместе, в зависимости от контекста).
Конрад Моравский
@Felice: посмотрите на MSpec :)
Брайан Бетчер,

Ответы:

18

Мой совет: избегайте файлов, содержащих несколько классов и имен файлов == классы, даже если вы имеете в виду, что файлов слишком много. Попробуйте организовать их в папках. В особых случаях у вас могут быть вложенные классы. В этом случае имеет смысл разделить основной класс и вложенный класс на разные файлы, имеющие один частичный класс. В этом случае я использую следующее соглашение об именах.

MyEnumerable.cs
MyEnumerable.MyEnumerator.cs

Возможно, вы также можете использовать составные имена файлов в вашем случае.

Георгий Мамаладзе
источник
4
Еще одна идея. Вы можете сгруппировать несколько файлов .cs внутри Visual Studio Project, чтобы они все отображались под одним узлом в дереве (например, файлы .Designer.cs). Это будет сигнализировать вам, что классы тесно связаны друг с другом.
6

Старайтесь избегать наличия в файле более одного класса, но не более одного открытого класса. При именовании файлов классов несколькими классами выберите описательное имя файла.

Refrences:

giftcv
источник
4

Учтите, что, задавая вопрос о том, как называть такие файлы, вы уже определили запах кода, который является проблематичным для вас, и эта проблема не исчезнет легко.

Независимо от рассуждений, вы обнаружите, что трудно выбрать разумные имена, когда у вас есть более одного класса в файле, потому что даже если файлы связаны каким-либо образом, всегда будет соблазн добавить что-то, что не совсем соответствует имени группы, которое вы назначаете набору классов.

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

Тем не менее, чтобы было легче начать, я бы спросил, являются ли дополнительные классы вложенными или независимыми. Если они независимы, то эти классы легче разделить на свои собственные файлы, где каждый файл назван для отдельного класса. В случае вложенности могут потребоваться дальнейшие решения о том, как такие классы должны быть организованы, однако вложенные классы могут не нуждаться в немедленном удалении, и поэтому файлы будут названы для самого внешнего класса. Что касается вложения, существует множество аргументов против и несколько разумных аргументов для вложения при некоторых обстоятельствах, и я бы посоветовал спросить, может ли разумное пространство имен и создание более организованной структуры исходного кода быть лучшим способом решения проблема.

Реально, однако, вы обнаружите, что к концу жизненного цикла вашего проекта вы захотите, чтобы все ваши файлы содержали только один класс и красивую структуру каталогов / пространств имен.

Ура,

S.Robins
источник
3

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

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

Jetti
источник