LINUX.ORG.RU

Общие модели в Django

 ,


0

1

Всем привет! Делаю сайт на Django и задался вопросом архитектуры. Поясню: у меня в проекте есть статьи, пользователи и другие сущности, находящиеся в разных пакетах проекта (приложениях), но все они имеют изображения (где-то только одно, где-то их может быть много). Вижу два наиболее подходящих варианта: 1) Сделать отдельное приложение utils, в котором создать общую для всех изображений модель Image и сделать её универсальной. Модели, которые имеют изображения, с помощью ForeignKey или ManyToMany связываются с моделью Image. На мой взгляд, основной недостаток тут в том, что получается сильная связанность между приложениями. 2) В каждом приложении создать свою модель Image, поля которой будут различаться незначительно (а, возможно, и вовсе одинаковыми будут). Тут вижу недостаток в дублировании кода либо частичном, либо полном. Какой из этих двух вариантов вам кажется наиболее удачным?

Ответ на: комментарий от pawnhearts

Вопрос именно в том, где именно хранить модель Image. Делать её общей или делать в каждом приложении свою отдельную?

dimuska139 ★★
() автор топика
Ответ на: комментарий от dimuska139

В первом случае общей, если наследоваться то делать в каждой свою и там foreignkey до нужной модели прописывать.

pawnhearts ★★★★★
()
Ответ на: комментарий от dimuska139

Делать её общей или делать в каждом приложении свою отдельную?

Конечно, общую. DRY, все дела.

сильная связанность между приложениями

От того, что у тебя два приложения ссылаются на одну модель, они связанными не становятся.

provaton ★★★★★
()

Не делай разные приложения, если не планируешь абсолютно точно их использовать отдельно. Пользы - 0, а начнёшь потом менять что-то - геморрой.

anonymous
()

Создай библиотеку миксинов из абстрактных классов. В этой же библиотеке создай файл с моделями унаследованными от твоих абстрактных миксинов, просто Image(AbstractImage): pass в таком стиле. Таким образом из твоей библиотеки будет 2 интерфейса на выбор - либо абстрактная модель и в каждом приложении ты будешь от нее наследоваться уже не абстрактно, если эти приложения архитектурно подразумевают под Image несколько разные сущности. Либо импортируй конкретную Image из этого файла в рамках библиотеки миксинов - в свои приолжения: в данном случае все модели приложений, наследующиеся или имеющие поле Image будут физически ссылаться на одну и ту же сущность в виде таблички. Таким образом ты и элегантно решишь свою задачу без копипаста и создашь переиспользуемую библиотеку миксинов, от которой будет просто наследоваться сторонним разработчикам или тебе самому в следующем проекте при, допустим, несколько других задачах.

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

alienclaster ★★★
()
Ответ на: комментарий от alienclaster

Я переделываю свой старый проект просто - кода там и тестов уже накопилось весьма прилично, поэтому одним приложением это делать ну не очень удобно. Я разделил на приложения: 1) Юзеры 2) Статьи 3) Объявления 4) Анекдоты У всех них очень мало общего, кроме того, что у 1, 2, 3 могут быть изображения, которые у меня сейчас вынесены в отдельное приложение 4 - utils.

dimuska139 ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.