Плохо ли иметь несколько классов в одном файле? - PullRequest
60 голосов
/ 11 декабря 2008

Раньше у меня был один класс для одного файла. Например, car.cs имеет класс car . Но так как я программирую больше классов, я хотел бы добавить их в тот же файл. Например, car.cs имеет класс автомобиль , класс дверь и т. Д.

Мой вопрос хорош для Java, C #, PHP или любого другого языка программирования. Должен ли я попытаться не иметь несколько классов в одном файле, или это нормально?

Ответы [ 15 ]

2 голосов
/ 22 февраля 2012

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

Один файл с несколькими небольшими связанными классами может быть более читабельным, чем несколько файлов. Например, при использовании «case-классов» для имитации типов объединения существует тесная связь между каждым классом. Использование одного и того же файла для нескольких классов имеет то преимущество, что они визуально группируются для читателя.

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

2 голосов
/ 11 декабря 2008

Как часто бывает в программировании, это сильно зависит от ситуации.

Например, какова сплоченность рассматриваемых классов? Они тесно связаны? Они полностью ортогональны? Они связаны по функциональности?

Для веб-фреймворка было бы нецелесообразно предоставлять виджеты общего назначения. Какой бы файл не содержал BaseWidget, TextWidget, CharWidget и т. Д.

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

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

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

2 голосов
/ 11 декабря 2008

Как правило, один класс / один файл - это путь. Я часто держу несколько определений интерфейса в одном файле. Несколько классов в одном файле? Только если они очень так или иначе тесно связаны и очень малы (<5 методов и членов) </p>

1 голос
/ 11 января 2010

Ответ Smalltalk: у вас не должно быть файлов (для программирования). Они делают управление версиями и навигацию болезненными.

1 голос
/ 11 декабря 2008

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

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

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