1

従来の ASP から派生して、現在、比較的大きな Django アプリケーションを開発しています。このプロジェクトのコードを扱いやすい部分に分割する方法を見つけようとしています。

議論のために、USERS と多対多の関係にある CLIENTS があり、これらのユーザーには 1 つの ROLE があり、各役割には RIGHTS と多対多の関係があるとします。
現在、これらすべてを「backoffice」という 1 つのアプリにまとめています。

欠点は、backoffice アプリ内の forms.py と views.py に、これらすべてのエンティティのクラスが含まれていることです。アプリケーションは確実に拡大するため、これらのエンティティのコードをいくつかのファイルに分けたいと考えています。したがって、それらは実際には別個のアプリではありませんが (私が思うに)、プロジェクトのバックオフィス部分の異なる部分を扱っていることは確かです。

インターネットで調べたところ、2 つの意見があるようです。1つは、models.pyやviews.pyなどを分割して、フォルダ/モジュールにする方法です。これらのフォルダーには、clients.py/users.py/roles.py などを含めることができます。これにより、アプリはそのまま維持されますが、コードは分離されます。最終的には、多数のファイルを含む 1 つの大きなアプリが作成されます。

もう 1 つのオプションは、コードを分割し、クライアント、ユーザー、およびロールを個別のアプリに変え、現在ある「バックオフィス」アプリを完全に削除することです。Django は小さなアプリへの分割を推奨していますが、これらは実際には個別のアプリではなく、クライアント ユーザーとロールは密接に関連しており、私たちが作成しているメンテナンス ツールはこれを反映しています。

私は実際には、「バックオフィス」アプリ内に小さな (サブ) アプリを作成することから始めましたが、ここでそれはうまくいかないことがわかりました。

問題は、アプリは再利用を促進する必要があり、私たちが構築している大規模な Web アプリには多くの部分が絡み合って相互に依存しているということです。現実世界で意味のある、より小さな再利用可能なパーツに分割する現実的な方法はありません。

ですから、問題は本当にです。この例でユーザー/クライアント/ロールのコードを分離するための推奨される方法と、いずれかの方法の長所/短所は何ですか? たぶん、私たちが見つけていない完全に別の方法さえあるかもしれません...

御時間ありがとうございます。

4

2 に答える 2

1

常に別のアプリを使用してください。models.py などの細分化はハックであり、ハックに期待するとおりに機能します。配線を直すだけでかなりの時間を費やすことになります。

小さな自己完結型アプリの主な利点は、再利用性です。実際には、それらをプロジェクトの一部にする必要さえありません。実際、そうしないことをお勧めします。代わりに、各ピースを個別にパッケージ化して、他のサードパーティ アプリと同じようにインストールし、INSTALLED_APPS. そうすれば、プロジェクトはそのプロジェクトに固有のものだけに焦点を当て、後でそれらを他のプロジェクトにドロップできます。これには、自己完結型のコードを記述し、個々の部分とプロジェクトへの依存を減らす必要あるという副次的な利点もあります。

ただし、FWIW、あなたが説明する機能のほとんどは、すでに Django のauthcontrib パッケージに組み込まれています。まだ組み込まれていないものは、サードパーティのパッケージとして既に利用可能であるため、とにかくここで車輪を回転させるだけです.

于 2012-06-29T14:40:10.333 に答える
0

それぞれを独自のアプリケーションに分離することを考えます。アプリの構造は誤解を招く可能性があります。再利用可能/プラグイン可能なdjangoアプリはたくさんありますが、多くのプロジェクトでは、再利用のために各アプリを再パッケージ化しようとはしていません。アプリは、コードを適切に分離するだけです。

私はRoleモデルを持っているとイメージします。役割固有のユーティリティ機能がある可能性があり、それが外向きの場合は、おそらくロール固有のURLがあります。

これらは基本的なクラッド操作である可能性があります。

/roles/add、、これら/roles/delete /roles/create/roles/update/ それぞれは、独自のアプリとurls.pyを保証する可能性があります。クライアントが同じ操作を行う場合、実際には同じビューに配置するべきではありません。

これは、同じアプリ内の複数のビューで解決できますが、アプリの構造を適切に利用しているとは思いません。

于 2012-06-29T13:52:13.723 に答える