4

私は 3 層 EJB アプリケーションを使用しており、オブジェクトの非常に大きなコレクション (5000 以上の注文) を表示するシック クライアント (デスクトップ Java アプリケーション) でビューを作成する必要があります。各オブジェクトには、複雑なオブジェクトでもある子プロパティがあります。次に例を示します。

class Address
{
 String value 
 // other properties
}

class Order
{
 public String Number

 // this is collection of complex object and I need first and last object to show it's
 // properties in view
 public List<Address> getAddresses()

 // other properties
}

ビューは注文のテーブルです。

番号 | 最初のアドレス | LastAddress | ...

私の最初の試みは、注文の完全なリスト (子プロパティなし) をロードし、表示が必要なときに子オブジェクトを動的にダウンロードすることでした。しかし、10000 件の注文があり、高速スクロールを開始すると、UI が応答しなくなります。

次に、テーブルに表示する必要があるすべての注文とすべての子をロードしようとしましたが、おそらくメモリ コストが原因で、UI が非常に重く遅くなります)。そして、ほとんどすべてのデータをdbからダウンロードするため、シッククライアントではありません。

このタスクを解決するためのベスト プラクティスは何ですか?

4

4 に答える 4

2

何らかのページネーションを実装することをお勧めします。つまり、すべてのデータの小さなサブセットのみを取得するメカニズムを実装し、それらをさまざまなページでチャンクごとに表示する必要があります。

まさに「どのように」これまでのアプローチに依存します。

  • すでに述べたようなプログラミングパターンを使用することができます
  • または、DB サーバーにクエリを実行する DB レベルで実装することもできます。つまり、選択した DBMS によっては、ここ
    のように、すべてのデータの一部のみを取得するような方法でフェッチ クエリを記述する必要があります。

お役に立てれば!

于 2011-10-16T16:41:17.770 に答える
2

値オブジェクトまたはデータ転送オブジェクトのパターンに従います。本当に必要なものだけを送ってください。ドメイン オブジェクトのグラフを送信する代わりに、ビューごとに 1 つまたは複数の「愚かな」フラット オブジェクト (単純な属性を含む) を作成します。

于 2011-10-16T16:09:53.497 に答える
2

JTableを適切な のビューとして使用していると仮定すると、 を使用してTableModelデータベースにクエリを実行し、結果が到着したら取得します。わかりやすくするために、このでは 10 個のブロックでランダム データをフェッチするだけです。データが蓄積されても、UI は応答し続けることに注意してください。SwingWorkerpublish()

于 2011-10-16T17:49:21.350 に答える
1

リストの要素のごく一部と合計数のみを取得し、元のリストの他の部分をオンデマンドでロードする機能を持つ、リストのプロキシ オブジェクトを作成することをお勧めします。

于 2011-10-16T16:09:05.940 に答える