Как организовать классы С#

Есть ли общая практика, когда вы планируете организовывать свои классы в С#? Должен ли быть только один общий класс для каждого файла .cs? Я вижу, что у меня есть Form1.cs, который включает все классы, относящиеся к "Form1". Однако я мог бы создать файл с именем Misc.cs, который включает в себя все разные классы. Не уверен, куда идти, поэтому все остается организованным.

Или я должен организовать их определенным образом? Например, я обращаюсь к базе данных MySQL, поэтому я создаю оболочку MySQL, которую я буду хранить в MysqlWrapper.cs, и назову класс, соответствующий этому. Должен ли я создать новый .cs для каждого класса, который я создаю?

Или мне следует комбинировать только те, которые используют похожие "использование" пространств имен, таких как System.Text; используя System.Windows.Forms; и т.д.?

Ответы

Ответ 1

Изменить - этот ответ предназначен для дополнения хороших ответов, которые другие уже опубликовали.

Все остальные, кажется, отвечают специфике. Я думаю, что у вас будут вопросы по дизайну "лучшие практики".

Официальные рекомендации можно найти здесь: http://msdn.microsoft.com/en-us/library/czefa0ke(VS.71).aspx

В частности, вникните в Руководство по именованию, а затем в Руководства по названиям имен и правилам именования классов.

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

Ответ 2

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

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


Я вижу, что у меня есть Form1.cs, который включает все классы, относящиеся к "Form1".

Вместо того, чтобы организовывать этот путь, я бы рекомендовал разделить их на отдельные файлы. Если у вас довольно много классов, связанных с конкретной операцией (выполняемой или доступной через Form1), я бы подумал о том, чтобы помещать их в собственное пространство имен. Я также настоятельно рекомендую переименовать "Form1" в нечто более значимое, например "EmployeeForm". Это упростит понимание и поддержку вашего кода в будущем.

Ответ 3

Один класс для файла обычно принимается. Некоторые классы распространяются по нескольким файлам с использованием "частичного" ключевого слова. Моя структура папок свободно соответствует структуре пространства имен.

Ответ 4

Мне может быть отказано в этом, но, по крайней мере, в Visual Studio это, вероятно, не так важно, как раньше.

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

Вы можете щелкнуть правой кнопкой мыши по идентификатору и нажать "Перейти к определению", чтобы перейти к нему, вы можете нажать ctrl + запятую для поиска, или вы можете использовать представление класса.

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

Ответ 5

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

Ответ 6

Как правило, ваш код более удобен в обслуживании (проще для других людей читать), если у вас есть один тип файла. (Класс/структура/перечисление).

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

Ответ 7

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

Ответ 8

Вам нужно всего несколько принципов:

Поддержание работоспособности: должно быть легко сохранить проект в актуальном состоянии и исправить ошибки. Вопросы: потребуется ли возраст, чтобы найти данный класс/функцию? Если есть ошибка, возможно, это произойдет там, где будет выглядеть программист (который не обязательно будет писателем)?

Сложность: должно быть ясно, что делает программа. Иногда его расщепление помогает. Иногда помогает держать вещи вместе. Вопросы: Будет ли кто-то путать, когда они будут смотреть на него? Будут ли они задаваться вопросом, что все части?

Это просто здравый смысл. Кроме того, обратите внимание, что некоторые инструменты IDE позволят вам оставить вещи в беспорядочном состоянии и все еще смогут найти материал (например, справочные искатели). Вы должны решить, какой уровень беспорядка является приемлемым, и когда нужно время для рефакторинга.

Ответ 9

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

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

Ответ 10

Я также иногда объединяю похожие файлы классов в одну ветвь в VS.

Например, если у вас есть 3 файла: Message.xaml, Message.xaml.cs, MessageButton.cs, MessageImage.cs, MessageResult.cs.

Message.xaml.cs уже будет отображаться внутри первой файловой иерархии. Вы также можете добавить других, просто отредактировав файл проекта с помощью блокнота. Вам нужно добавить

   <DependentUpon> </DependentUpon>

где это необходимо.

Я не знаю, есть ли расширение VS для этого намного проще.

И вот одно. Хотя это поможет вам организовать ваши файлы в проекте, вы не сможете переименовать свой класс, просто дважды щелкнув имя файла в VS.