Djangoで新しいアプリを(startappで)作成するのはいつですか?


102

私はこれをググってみましたが、私はDjangoが「アプリ」として定義するものに関してまだ問題を抱えています。

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

皆さんは、新しいアプリをいつ分割するか、いつ「メインプロジェクト」や他のアプリと機能を一緒に保つべきかについて大まかな目安がありますか?

回答:


43

James Bennettが、Djangoで再利用可能なアプリを整理する方法についてのすばらしいスライド用意しています。


1
つまり、子モデルを作成する場合、常に同じアプリ内にある必要がありますか?2つの「アプリ」を引き継がずに別のプロジェクトに簡単にドロップすることはできないので、
Lionelは

18

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

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

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

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


16

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

DjangoCon 2008:再利用可能なアプリ@ 7:53

スライド:Reusable_apps.pdf

スライドから撮影

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

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

それらのいずれかが「はい」ですか?次に、それを別のアプリケーションに分割するのが最善です。


私が見たスライドには、「アプリのフォーカス」に関する最初の質問は含まれていません。
ジョニー

@johnnyそれは99のスライド31にあります

13

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

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

6

私が従うルールは、別のプロジェクトで機能を再利用したい場合、それは新しいアプリであるべきだということです。

プロジェクトのモデルを深く理解する必要がある場合は、モデルに固執するほうがまとまりがあります。


3

私がウェブ上で見つけたこの質問に対する2つの最良の答えは次のとおりです。

  1. 再利用可能なアプリトーク(スライド)(ビデオ)も他の回答で言及されています。著者でありDjangoの寄稿者であるBennettは、他のユーザーが使用できるようにアプリを定期的に公開しており、多くの小さなアプリに対して強い見方をしています。
  2. DoordashのTips for Django at Scaleは反対のアドバイスを提供し、多くの個別のアプリで開始した後、1つのアプリに移行したと述べています。アプリ間の移行依存グラフで問題が発生しました。

どちらのソースも、次の状況では別のアプリを作成する必要があることに同意しています。

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

1

「アプリ」は多くの異なるものになる可能性があります。たとえば、ブログを作成しているとします。アプリをブログ全体にすることも、「管理者」アプリ、すべてのパブリックビュー用の「サイト」アプリ、「rss」アプリ、「サービス」アプリを用意して、開発者がブログでインターフェイスをとることができるようにすることもできます独自の方法など

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

Djangoの良い点は、ディレクトリツリーの任意のレベルにあるすべてのmodels.pyファイルがDjangoモデルを含むファイルとして認識されることです。したがって、「アプリ」自体の中で機能を小さな「サブアプリ」に分割しても、何も難しくはありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.