0

私は、MVC パターンをできる限り尊重するよう努めています。これにより、開発者 (または開発者) の生活が大幅に簡素化されます。私が疑問に思っているのは、一度に複数のセクションをロードする方法です。

わかりやすくするために、to-do リストの例を取り上げます (最近よく使われています)。プロジェクト -> マイルストーン -> タスクがあるとしましょう。

私たちの必要なもの:

  • それらをすべて取得 - ネストされた json エンコード配列内のすべてのタスクを含むすべてのマイルストーンを含むすべてのプロジェクト。
  • プロジェクトのみを取得する
  • マイルストーンのみを取得する
  • タスクのみを取得する

最後の 3 つについては、対応するデータを提供する個別のコントローラーを使用できます。ネストされた json でエンコードされた配列で「それらをすべて取得」しようとすると、問題が発生します。

おそらくそれを処理する最良の方法は何ですか?

私はいくつかの可能性を考えました:
- プロジェクト、マイルストーン、およびタスク ジェネレーターをヘルパー クラスに移動します。これは、個々のコントローラーからそれらを呼び出し、それらすべてを取得する必要があるときにも呼び出すことを意味します。
- プロジェクトのビューから、 (各プロジェクトの) マイルストーンのコントローラー/ビュー [次に、(各マイルストーンの) タスクのコントローラー/ビューを呼び出す]。これは、1 つの 3 つのリクエストのシミュレーションのように見えるかもしれません。

動機は、すべてのプロジェクトをフェッチし、次に各プロジェクトのマイルストーン、そして各マイルストーンのタスクをフェッチできたものの、多くのリクエストが必要になるという事実から来ています。すべての呼び出しを 1 回で取得できれば、データを取得するのにかかる時間が大幅に短縮されます。1 回の要求でデータがより整理されることは言うまでもありません。

4

2 に答える 2

1

データ アクセスの問題を、さまざまなコントローラーからアクセスできる論理レイヤーに分離する必要があります。

DDD パスをたどる場合は、ドメイン オブジェクト (プロジェクト、タスクなど) を特定し、ルートを集約してから、データ アクセス用のリポジトリを構築するのが理にかなっています。異なるコントローラでリポジトリ (ProjectRepository、TaskRepository など) を再利用できます。リポジトリ自体が再利用の単位となり、同じインターフェイスを使用して複数のコントローラからデータを取得できます。同じコントローラーから複数のリポジトリーからデータを効率的に取得する必要がある場合は、作業単位を利用することもできます。

DDD パスをたどらない場合は、データベース レコードのメモリ内表現となる ActiveRecord パターン (Ruby on Rails など) を使用できます。リレーショナル SQL データベースを使用している場合、これはおそらく非常に簡単に実装できます。

あなたの場合のプロジェクトは集約ルートであると思います。つまり、リポジトリは 1 つしかありません (ProjectRepository)。そのリポジトリには、すべてのプロジェクトを取得し、すべての関連データ (マイルストーンなど) を取得する操作があり、データ ソース (ストア プロシージャ?) にできるだけ近い最適化された高速操作になります。コントローラー自体では、取得したオブジェクトを使用し、JSON にシリアル化/エンコードします。

于 2012-09-30T09:50:30.353 に答える
0

ブラウザから 3 つの独立した JSON リクエストを作成します。心配しないで。Firebug をオンにして、mail.google.com を開くと、40 を超えるリクエストが表示されます。

于 2013-09-11T00:30:09.883 に答える