Один класс на файловое правило в .NET? - PullRequest
179 голосов
/ 12 марта 2010

Я следую этому правилу, но некоторые из моих коллег не согласны с ним и утверждают, что если класс меньше, его можно оставить в том же файле с другим классом (ами).

Другой аргумент, который я слышу все время: «Даже Microsoft не делает этого, так почему мы должны?»

Какой общий консенсус по этому поводу? Есть ли случаи, когда этого следует избегать?

Ответы [ 28 ]

5 голосов
/ 12 марта 2010

Инструмент StyleCop для C # имеет стандартные правила, которые требуют не более одного класса верхнего уровня в одном пространстве имен (плюс любое количество интерфейсов, делегатов и перечислений в этом пространстве имен).

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

5 голосов
/ 13 марта 2010

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

Итак, дело в том: по усмотрению следует использовать !!!

5 голосов
/ 12 марта 2010

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

4 голосов
/ 12 марта 2010

Иногда один класс на файл, , но ...

Когда несколько классов строго связаны, более одного класса в одном и том же исходном файле, IMHO, ЛУЧШЕ , чем выделение короткого исходного файла для каждого класса. Источник более читабелен и компактен (и с помощью #region тот же источник может быть более структурированным, чем раньше).

Учтите также, что иногда НЕОБХОДИМО распространять один и тот же класс по разным файлам (используя частичный ), поскольку наличие исходного файла с 20000+ строк не удобно даже с ОЗУ I есть в наличии (но это другой вопрос).

3 голосов
/ 12 марта 2010

Иногда я оставляю небольшой класс с большим классом, но только если они очень тесно связаны, как объект и его класс коллекции или фабрика.

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

есть.

  • в понедельник я делаю изменения в своих классах x и y в файле y.css
  • во вторник я отделяю класс x в его собственный файл x.css, потому что он вырос до большого размера
  • в среду мой босс хочет посмотреть, что я изменил в классе x в понедельник, поэтому он смотрит на историю для x.css, только x.css не показывает историю до изменений во вторник.
3 голосов
/ 12 марта 2010

Это действительно проблема? :)
Действительно маленькие классы, как и перечисления, могут быть объединены с другими. Есть одно правило: соберите вместе только те классы, которые имеют что-то общее.

В качестве отступления - в одном из моих проектов у меня есть файл, содержащий 150 классов внутри. Файл имеет 10000 строк кода. Но он генерируется автоматически, поэтому вполне приемлем:)

3 голосов
/ 12 марта 2010

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

2 голосов
/ 12 марта 2010

Я делаю это редко. Например, если есть перечисление или структура, которые тесно связаны с классом, но слишком тривиальны для самостоятельного разделения.

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

2 голосов
/ 13 марта 2010

Я следую за этим 99% времени. Хорошо следовать стандартам, но я также верю, что гибкость имеет место. Иногда кажется просто глупой тратой времени на то, чтобы разбить вещи на части. В те времена я перебиваю себя и просто пишу свой код.

2 голосов
/ 12 марта 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...