Я нахожусь в ситуации, когда мне нужно объединить два приложения 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)