web-dev-qa-db-ja.com

Djangoで(startappを使用して)新しいアプリを作成するタイミング

私はこれをグーグルで探しましたが、Djangoが「アプリ」として定義するものに関してはまだ問題があります。

メインプロジェクトのモデルを使用している場合でも、サイトの機能ごとに新しいアプリを作成する必要がありますか?

新しいアプリをいつ分割するのか、「メインプロジェクト」または他のアプリと機能をいつ維持するのかについて、大まかな目安はありますか?

86
Håkan

James Bennettには、Djangoで再利用可能なアプリを整理する方法に関するすばらしい スライドのセット があります。

40
Antti Rasinen

Djangoアプリケーションを「アプリケーション」よりも再利用可能なモジュールまたはコンポーネントと考えることを好む。

これにより、特定の機能を相互にカプセル化および分離し、特定の「アプリ」をコミュニティ全体で共有する場合の再利用性と保守性を向上させることができます。

私の一般的なアプローチは、特定の機能または機能セットを「アプリ」にまとめて、それらを公開するかのようにすることです。ここで難しいのは、各バケットの大きさを把握することです。

私が使用する良いコツは、公開されたアプリがどのように使用されるかを想像することです。これにより、バケットを縮小し、その「目的」をより明確に定義することがしばしば促されます。

18
blahspam

これが2008年9月6日に更新されたプレゼンテーションです。

DjangoCon 2008:Reusable Apps @ 7:5

スライド:Reusable_apps.pdf

スライドから撮影

これは独自のアプリケーションである必要がありますか?

  • アプリのフォーカスとはまったく無関係ですか?
  • それは私がやっていることに直交していますか?
  • 他のサイトでも同様の機能が必要ですか?

それらのいずれかが「はい」の場合は?次に、別のアプリケーションに分割することをお勧めします。

12
Yeo

私は、論理的に別個のモデルセットごとに新しいアプリケーションを作成する傾向があります。例えば。:

  • ユーザープロファイル
  • フォーラム投稿
  • ブログ投稿
11
pobk

私が従うルールは、別のプロジェクトで機能を再利用したい場合、新しいアプリでなければならないということです。

プロジェクトのモデルを深く理解する必要がある場合は、おそらくモデルに固執する方がましです。

5
Ryan

「アプリ」は多くの異なるものである可能性があり、それはすべて実際に味になります。たとえば、ブログを構築しているとしましょう。アプリはブログ全体にすることも、「admin」アプリ、すべてのパブリックビュー用の「site」アプリ、「rss」アプリ、「services」アプリを作成して、開発者がブログでインターフェイスできるようにすることもできます独自の方法など.

私は個人的にブログ自体をアプリにし、その中の機能を打ち出しました。ブログは他のWebサイトでかなり簡単に再利用できます。

Django=の良いところは、ディレクトリツリーのどのレベル内のmodels.pyファイルでも、Djangoモデルを含むファイルとして認識することです。 「アプリ」自体の中の小さな「サブアプリ」に機能を追加しても、それ以上難しくなることはありません。

1
willurd

私がウェブ上で見つけたこの質問に対する2つのベストアンサーは次のとおりです。

  1. 再利用可能なアプリトーク( スライド )( ビデオ )他の回答でも言及されています。著者であり、Django貢献者であるBennettは、他の人が使用するアプリを定期的に公開しており、多くの小さなアプリに対する強い視点を持っています。
  2. Doordash's Tips for Django at scale これは反対のアドバイスを与え、多くの個別のアプリを起動した後に単一のアプリに移行したと言います。アプリ間の移行依存関係グラフ。

両方のソースは、次の状況で個別のアプリを作成する必要があることに同意します。

  • 別のDjangoプロジェクトでアプリを再利用する予定の場合(特に、他の人が再利用できるように公開する予定の場合)。
  • アプリに他のアプリとの依存関係がほとんどないかまったくない場合。ここで、将来、独自のマイクロサービスとして実行されるアプリを想像できるかもしれません。
1
Jonathan Berger