49

私はこのアプリ全体のアイデアに本当に苦労しています。多くのチュートリアルとスタイル ガイドを読み、1 つのことだけを行う特殊なアプリを作成する必要があることを知っています。これは、いくつかの単純なチュートリアル プロジェクトを見るとすべて意味がありますが、実際の複雑なプロジェクトになるとすぐに、異なるアプリ間の線引きをどのようにすればよいか判断できなくなります。

問題の 1 つは、ユーザーがさまざまなものを見る 1 つのサイト (または複数のサイト) が必要なことです。アプリのデザイン ルールに従う場合、別のアプリのものであるべきもの。このようなことをどのように認識しますか?私の最初のアイデアは、 という 1 つのアプリを作成することでしたui。これは、実際にテンプレートにつながるすべてのビューを処理するだけで、他のすべてのアプリはモデルとヘルパー関数を提供します。しかし、uiアプリが大きくなりすぎるのではないかと心配しています。

簡単な例を挙げると、ユーザーが次のタスクを実行できるサイトが必要です。

  • 件名を選択
  • 選択した件名にいくつかのオプションを設定する
  • 彼のアカウントに関連付けられているファイルをアップロードする
  • アップロードされたファイルの一部を件名に割り当てます
  • 主題に関連する音声を録音します

ここでは、次の 3 つのアプリを作成します。

  1. サブジェクト (サブジェクト モデルといくつかの関連モデルを含む)
  2. リソース (リソース モデルを含み、アップロードを処理します)
  3. audio (すべてのオーディオの録音と処理を処理します)

ただし、これらのアプリがどのように相互作用するかを処理し、すべてのアプリが何らかの形で関与する実際のサイトを作成するには、何らかのアプリが必要mainですui

それで、これを行う「正しい」方法はありますか?または、使用できるパターンはありますか?すでにかなりの数を読んでいますが、このトピックに関する優れたリソースへのリンクもいただければ幸いです。

4

2 に答える 2

19

構造が自分にとって意味のあるものであることを確認する必要があるだけです

プロジェクトのロジックの別の部分にバインドされている機能ごとに新しいアプリを作成する必要はありません。

再利用可能なアプリはまったく別の話です。それらのコードは、実装をある程度認識しない必要があります。

インスピレーションを得るため、 Django の構造を見てみましょう

あなたの例の可能なレイアウト:

project_root/
    project/
        __init__.py
        settings.py
        urls.py
        templates/
            app1/  # override stuff
        static/
        media/
    app1/
        __init__.py
        admin/  # as a package
            __init__.py
            subjects.py
            resources.py
            # etc
        models/  # as a package
            subjects.py
            resources.py
            # etc
        managers/
            __init__.py
            subjects.py
            resources.py
            # etc
        services/
            __init__.py
            audio.py  # upload handler etc
        views/
            __init__.py
            subjects.py
        urls/
            __init__.py
            subjects.py
        templates/
            app1/
                subject_list.html  # override at project level
        static/
            app1/
                css/
                    subject.css  # override at project level
    app2/
        __init__.py
        models.py  # holds a Member model or whatever you require
    manage.py
于 2013-08-16T10:25:00.673 に答える
13

アプリを区切る最良の方法は、オブジェクト指向プログラミング言語でクラスを区切る方法とほぼ同じだと思います。変数とメソッドの代わりに、モデルとビューをそれぞれ考えます。

モデルはオブジェクトの状態であり、ビューはオブジェクトの状態を確認して操作するために使用されます。

私の経験則では、アプリを作成すると、特定のモデルのセットをカプセル化するのに役立ちますか? もしそうなら、私はそれを作成しようとします。

于 2013-08-16T10:30:56.657 に答える