Это плохая практика иметь несколько классов в одном файле?



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



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

1186   15  

15 ответов:

Я думаю, что вы должны попытаться сохранить свой код до 1 класса на файл.

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

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

в Java, один public класс на файл-это способ работы языка. Группа файлов Java может быть собрана в пакет.

в Python, однако, файлы являются "модулями" и обычно имеют ряд тесно связанных классов. Пакет Python-это каталог, как и пакет Java.

Это дает Python дополнительный уровень группировки между классом и пакетом.

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

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

public class Customer { /* whatever */ }

public class CustomerCollection : List<Customer> { /* whatever */ }

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

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

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

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

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

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

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

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

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

Если вы чувствуете себя хорошо, чтобы поместить их в тот же файл, Будьте моим гостем. Не могу сделать это с публичными классами в однако java;)

поскольку IDE предоставляет вам "перейти к" функции и у вас есть некоторый контроль над пространства имен в ваших классах, то ниже преимущества наличия нескольких классов в одном файле вполне стоит для меня.

Родительско-Дочерние Классы

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

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

Public: Small - Helper - DTO Classes

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

навигация по коду также проще просто прокручивать один файл вместо переключения между 10 файлами...Его также легче рефакторинг когда вам нужно отредактировать только одну ссылку вместо 10.....

общие нарушения железное правило 1 класса на файл предоставляет некоторые дополнительные свободы для организации кода.

Что происходит потом, действительно зависит от вашей IDE, языка, командного общения и Организаторские Способности.

но если ты хочешь этой свободы, зачем жертвовать ею ради железного правила?

Как правило, один класс-один файл является способом пойти. Однако я часто храню несколько определений интерфейса в одном файле. Несколько классов в одном файле? Только если они очень тесно связаны как-то, и очень мало (

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

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

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

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

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

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

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

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

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

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

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

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

Comments

    Ничего не найдено.