2016-09-17 3 views
0

Я пишу бэкэнд для приложения SaaS в django. Необходимо руководствоваться архитектурой. Таким образом, у продукта будет 2 предложения: общий, где все пользователи будут использовать одну и ту же базу данных и премиум-версию с выделенной базой данных. Как я планирую перевести это на django, следующее:Бэкэнд-архитектура для продукта SaaS в django

  • В рамках проекта django будет создано одно приложение для общего предложения.
  • Для каждого премиального клиента будет отдельное приложение.
  • У каждого приложения одинаковые модели.
  • Каждое приложение связывается с отдельной базой данных. Достигнуто это с использованием: stackoverflow post и django documentation
  • Я напишу виды для всех API-интерфейсов в view.py проекта, а не в любом приложении, и решите на основе токена, к которому подключаются модели приложения.

Проблемы, которые я вижу сейчас с этой архитектурой:

  • Во всех взглядов, я должен буду писать много условных операторов, когда число клиентов увеличивается премиум.
  • Для размещения новых клиентов премиум-класса требуется довольно много изменений кода.
  • Дублирование кода в models.py всех различных приложений. Но это почти похоже на запись операторов для создания таблиц в новой базе данных каждый раз, когда подписывается премиальный клиент. Комментарии?

Просьба сообщить мне об архитектуре в целом. Я прошел через множество статей и столбиков переполнения, прежде чем идти этим путем, но ни один из них не был полностью специфичен для django, поэтому я не уверен на 100%. Большое спасибо заранее.

ответ

0

Если функциональность бесплатных и премиальных предложений будет одинаковой, вам не нужно будет дублировать код. Это, конечно, большой IF, потому что вполне возможно, что вы добавите дополнительные функции в премиум-предложение.

Если функциональность будет точно такой же, то все, что вам нужно сделать, это добавить любые новые премиальные базы данных в свои settings.py и использовать промежуточное программное обеспечение, чтобы определить, с какой базой данных должны взаимодействовать ваши модели (с использованием атрибута using) и для общей базы данных добавьте столбец owner в каждую таблицу, которая записывает, кто является владельцем этой строки, чтобы вы могли соответствующим образом фильтровать запросы.