Весь код в одном файле - PullRequest
       26

Весь код в одном файле

5 голосов
/ 31 декабря 2008

После запроса организации моего проекта Python , а затем вызова из родительского файла в Python мне приходит в голову, что будет намного проще поместить весь мой код в один файл (данные будут считаны извне).

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

Ответы [ 6 ]

12 голосов
/ 31 декабря 2008

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

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

4 голосов
/ 31 декабря 2008

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

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

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

2 голосов
/ 01 января 2009

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

Как только весь ваш код находится в одном файле , я предлагаю повторить следующее:

  1. Определите небольшую группу взаимозависимых классов.

  2. Извлечь эти классы в отдельный файл.

  3. Добавить модульные тесты для нового отдельного файла.

  4. Повторное тестирование всего проекта.

В зависимости от размера вашего проекта, не нужно слишком много итераций , чтобы вы достигли чего-то разумного.

2 голосов
/ 01 января 2009

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

  1. Нет библиотечного модуля, пытающегося перезвонить на главную. Вам придется переписать вещи, чтобы это исправить.

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

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

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

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

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

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

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

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

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

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

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

...