Как расположить исходный код приложения, созданного с помощью SQLAlchemy и графического интерфейса? - PullRequest
6 голосов
/ 02 октября 2009

Я разрабатываю приложение с использованием SQLAlchemy и wxPython, которое пытаюсь распределить в отдельных модулях, состоящих из бизнес-логики, ORM и GUI.

Я не совсем уверен, как сделать это питонским способом.

Учитывая, что mapping() нужно вызывать по-другому для используемых объектов, я подумал о том, чтобы поместить его в __init__.py логики бизнес-процессов, но сохранить все определения таблиц в отдельном модуле orm.py.

Должен ли я сохранить что-то вроде:

/Business
    /__init__.py
    |    mapping (module1.Class1, orm.table1)
    |
    /module1.py
         Class1

/orm.py
     import
     table1 = Table()
/GUI
    /main.py
    |    import business
    /crud.py

или что-то вроде

/Business
    /__init__.py
    |    import
    |
    /module1.py
         Class1
         table1 = Table()
         mapping (module1.Class1, orm.table1)

/GUI
    /main.py
    |    import business
    /crud.py

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

1 Ответ

5 голосов
/ 02 октября 2009

Я нахожу этот документ Jp Calderone отличным советом о том, как (не) структурировать ваш проект на Python. После этого у вас не будет проблем. Я воспроизведу весь текст здесь:

Структура файловой системы проекта Python

У

  • назовите каталог что-нибудь связанные с вашим проектом. Например, если ваш проект называется " Twisted ", назовите каталог верхнего уровня для его исходные файлы Twisted. Когда вы делаете релизы, вы должны включить версию суффикс номера: Twisted-2.5.
  • создать каталог Twisted/bin и положите туда свои исполняемые файлы, если вы есть какой-либо. Не давайте им .py расширение, даже если они Python исходные файлы. Не вставляйте код в их, кроме импорта и вызова основная функция определена где-то еще в ваших проектах.
  • Если ваш проект выражается как один Python исходный файл, затем поместите его в каталог и назвать его что-то связанные с вашим проектом. Например, Twisted/twisted.py. Если тебе надо несколько исходных файлов, создайте пакет вместо (Twisted/twisted/, с пустым Twisted/twisted/__init__.py) и поместите ваши исходные файлы в него. За пример, Twisted/twisted/internet.py.
  • положить ваши юнит-тесты в подпакете ваш пакет (примечание - это означает, что одиночная опция исходного файла Python выше был трюк - всегда нужно как минимум еще один файл для вашего устройства тесты). Например, Twisted/twisted/test/. Конечно, сделать пакет с Twisted/twisted/test/__init__.py. Поместите тесты в файлы, такие как Twisted/twisted/test/test_internet.py.
  • добавить Twisted/README и T wisted/setup.py, чтобы объяснить и установить программное обеспечение, соответственно, если тебе хорошо.

Не

  • поместите ваш источник в каталог называется src или lib. Это делает это сложно запустить без установки.
  • положить ваши тесты за пределами вашего Python пакет. Это затрудняет запуск тестирует установленную версию.
  • создать пакет, который имеет только __init__.py а потом положи все свои код в __init__.py. Просто сделай модуль вместо пакета, это проще.
  • попробуй придумать магические взломы, чтобы Python мог импортировать ваш модуль или пакет без попросив пользователя добавить каталог содержащий его к пути импорта (либо через PYTHONPATH, либо через механизм). Вы не будете правильно обрабатывать все случаи и пользователи получат зол на тебя, когда твое программное обеспечение не работает в их среде.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...