簡単にするために:
READ
オブジェクトを取得します。
LIST
READ
基になるオブジェクトを後で取得できるかどうかを確認できる ID のリストをクエリします。
ソーシャル ネットワーク Web の例
たとえば、ソーシャル ネットワークの Web サイトを運営しているとします。
各User
オブジェクトの長さは 10 または 20kB 程度であり、大量のもの (友達のリスト、最後の検索、アルバムと写真のリスト、Cookie、最後にアクセスしたページ、投稿のリスト、いいね! のリストなど) があると想像してください。
また、ルートがありcontroller
、ユーザーのプロファイルが からデータを取得し、model
それを に注入していることを想像してくださいview
。と呼びましょうprofile-page-view
。
controller
ビュー レンダラーにデータを渡すために、すべてのデータを取得する必要があることは明らかです。
ユーザーの最もアクティブな 100 人の友人profile-page-view
をfriends-widget
表示し、そのすべての情報 (情報の一部のセットをクエリすることはできません) を使用して、特定のuser-miniwidget
リンク、投稿、写真などを表示するとします。
一度に 100 人のユーザー (10k x 100 ユーザー = 1 MB のデータベースから取得される情報) を取得する代わりにLIST
、オブジェクトではなく ID を取得して、プロファイルの最もアクティブな友達だけを選択することもできます。
そしてREAD
、リストの最初の 5 つ (50kB の処理された情報) のみにコントローラーを設定して、それらを HTML に吐き出します。
次に、一連の AJAX 呼び出しを介して他の 95 を読み取ります。たとえば、次のようになります。
- ユーザー 11 から 50 は 5 のブロックで照会され、ページのロードの 2 秒後に最初の「5 つのオブジェクト
READ
操作」をトリガーし、その後の各ブロックは前のブロックが返されてから 1 秒後に、リスト内のユーザー 50 までトリガーされます。
- 残りのもの (50 から 100) は、ブラウザーがその領域にスクロールするか、マウスが近くに移動した場合にのみトリガーされます。
これは、LIST
とREAD
が完全に分離されている例です。
モデル API の例
企業の販売促進を支援するシステム モデルの API を想像してみてください。これは、製品に関する一連のデータを計算します。
請求書には行があり、各行には製品が関連付けられています。
請求書 4444 の 3 行目の製品を取得するには、次のようにします。
// Pseudo-language.
InvoiceManager invoiceManager;
Invoice invoice;
InvoiceLine line;
Product product;
invoiceManager = whateverDependencyInjectionSystemYouUse.getService( "InvoiceManager" );
invoice = invoiceManager.getInvoiceById( 4444 );
line = invoice.lines[ 3 ];
product = line.getProduct();
これにより、製品で READ 操作が実行されます。遅延読み込みの場合は、コード行でREAD
実行されます。line.getProduct();
それでも、特定の製品ファミリのトップセラーを見たい場合は、すべての製品を RAM に「ロード」する必要はないかもしれません。
製品カテゴリ「花」の売上トップ 20 の詳細を表示するとします。
// Pseudo-language.
ProductManager productManager;
ProductFamily productFamily;
Products products;
Product product;
productManager = whateverDependencyInjectionSystemYouUse.getService( "ProductManager" );
productFamily = productManager.getProductFamilyByName( "Flowers" );
products = productFamilies.getAllProductsSortedByAmountSoldLastMonth()
max = 20;
ctr = 0;
foreach( product in products )
{
dump( p );
ctr++;
if( ctr >= max )
{
break;
}
}
この場合、メソッドはせいぜい読み取りをproductFamily.getAllProductsSortedByAmountSoldLastMonth()
実装しますが、実際のオブジェクトを内部にロードする方法はありません。そのカテゴリに 100 万個の花製品があるとしたら?!?!?! - それは自殺です!LIST
次にproducts.getItem()
、for-each ループの各反復における暗黙的な呼び出しの各反復で、READ
実オブジェクトを照会するために実数が実行されます。
要するに
通常、 ID を取得すると、背後LIST
にあるオブジェクトかどうかに関係なく、軽量な方法で非常に簡単に管理および保存できます。READ