Правильно ли я организовал свое приложение django? - PullRequest
4 голосов
/ 31 августа 2010

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

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

Pythonic 'подпакетный' подход:

package
|-- __init__.py
|-- views.py
|-- models.py     # imports models from both sub-packages
|-- tests.py      # imports TestCase instances from both sub-packages
|-- etc.          # shared stuff
|-- a
|   |-- __init__.py
|   |-- views.py
|   |-- models.py
|   |-- tests.py
|   `-- etc.      # a-specific code
`-- b
    |-- __init__.py
    |-- views.py
    |-- models.py
    |-- tests.py
    `-- etc.      # b-specific code

Или для более непосредственного умиротворения богов Джанго:

package
|-- __init__.py
|-- views
|   |-- __init__.py
|   |-- a.py
|   `-- b.py
|-- models
|   |-- __init__.py  # imports models from a and b
|   |-- a.py
|   `-- b.py
|-- tests
|   |-- __init__.py  # imports TestCase instances from a and b
|   |-- a.py
|   `-- b.py
`-- etc. # shared/additional files

Хотя в данный момент я склоняюсь к первому (который кажется немного легче), моя интуиция говорит мне, что, хотя обе работы (и обе включают импорт «хаков» для соответствия структуре Джанго), лучший выбор зависит от содержимое a и b - в частности, какая часть кода является общей или специфичной для приложения. Неправильно постоянно повторять шаблон __ init__.py, a.py, b.py в каждом подкаталоге!

Мне интересно знать, что было бы более подходящим от людей с большим опытом работы с Python!

пс. Я знаю, что они могут жить как два разных приложения, но теперь они настолько взаимозависимы, что я чувствую, что их следует объединить! (даже если не считать улучшенную переносимость одного приложения Django)

Ответы [ 3 ]

2 голосов
/ 31 августа 2010

Флэт лучше, чем вложенный.

«Составное» приложение, построенное из двух одноранговых приложений, прекрасно.Это работает хорошо.

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

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

1 голос
/ 01 сентября 2010

В своих проектах я часто хочу как-то организовать представления и тесты, поэтому я использую такую ​​структуру:

package
|-- __init__.py
|-- models.py     # models are in one file
|-- etc.          # shared stuff
|-- tests
|   |-- __init__.py
|   |-- tests_orders.py
|   |-- tests_clients.py
|   |-- 
|   `-- etc.
|-- views
|   |-- __init__.py
|   |-- orders.py
|   |-- clients.py
|   |-- 
|   `-- etc.

Для больших проектов наличие функций просмотра в одном файле - боль (для меня).

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

1 голос
/ 31 августа 2010

Я не специалист по питону, но мне всегда нравится отделять приложения и другие артефакты как можно больше.

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

Прямая ссылка на проект github

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