2016-09-17 1 views
0

私はdjangoでSaaSアプリケーションのバックエンドを書いています。アーキテクチャに関するいくつかのガイダンスが必要です。 したがって、製品には2つの製品が含まれます:すべてのユーザーが同じデータベースを共有する一般的な製品と専用のデータベースを持つプレミアム製品です。これをdjangoに変換する方法は次のとおりです:djangoでのSaaS製品のバックエンドアーキテクチャ

  • djangoプロジェクト内では、一般用のアプリケーションが1つあります。
  • プレミアムクライアントごとに別々のアプリがあります。
  • 各アプリは同じモデルです。
  • すべてのアプリケーションは、別々のデータベースと通信します。これを実現するには、stackoverflow postdjango documentation
  • 私はすべてのAPIのビューをプロジェクトのviews.pyに書き込みます。アプリ内ではなく、アプリケーションのモデルと通信するトークンの基礎を決定します。私は、このアーキテクチャで、今見

問題:ビューのすべてにおいて

  • 、私はプレミアムクライアントの数が増加し、一度条件文の多くを記述する必要があります。
  • 新しいプレミアムクライアントのオンボーディングには、かなりのコード変更が必要です。
  • すべての異なるアプリケーションのmodels.pyのコードの重複。しかし、それは、プレミアムクライアントがサインアップするたびに、新しいデータベースにテーブルを作成するための文を書くこととほぼ同じです。コメント?

アーキテクチャー全体についてアドバイスしてください。私は多くの記事を読んで、このように行く前にオーバーフローポストを積み重ねましたが、どれも完全にジャンゴに特有なものではありませんでしたので、私は100%自信がありません。事前に多くの感謝。

答えて

0

無料サービスとプレミアムサービスの機能が全く同じであれば、コードの複製は必要ありません。これはもちろん、大きなIFです。プレミアム・オファリングに特別な機能を追加することは非常に考えられるからです。

機能が完全に同じであれば、新しいプレミアムデータベースをsettings.pyに追加し、ミドルウェアを使用してモデルと通信するデータベースを決定します(using属性を使用)。共有データベースの場合は、その行の所有者を記録するすべてのテーブルにowner列を追加して、クエリセットを適切にフィルタリングできます。