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

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

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

Вы единственный человек, который будет работать над кодом одновременно?

Jim Anderson 31.12.2008 23:07

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

Teifion 31.12.2008 23:09
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
4
2
2 094
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

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

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

+1 - Я согласен с точкой зрения СКМ. Это компромисс или долгосрочные инвестиции. Программные проекты - это не наследие одного программиста. Используйте ярлык сейчас, и вам придется заплатить позже. Так что лучше сейчас прими трудное решение и немного боли. В любом случае, это добавление к вашим навыкам организации кода.

JV. 31.12.2008 23:23

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

ShreevatsaR 31.12.2008 23:30

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

JV. 31.12.2008 23:34

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

Teifion 01.01.2009 00:36

нет, Godfile ужасен по многим причинам, SCM большой, и хобби-проекты не оправдывают этого - не практикуйте вредные привычки только потому, что они удобны

annakata 01.01.2009 02:13

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

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

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

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

Teifion 31.12.2008 23:15

Emerge, основная программа диспетчера пакетов Gentoo Linux, представляет собой один файл, состоящий из ~ 7000 строк кода Python.

Federico A. Ramponi 01.01.2009 18:31

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

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

joel.neely 01.01.2009 04:12

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  4. Повторно протестируйте весь проект.

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

Другие вопросы по теме