データベースを問い合せるとResultSetに戻りますか?それともCollectionに戻りますか?
データベース・アクセスをカプセル化した以上、クエリー・データベースがデータベースからすべてのユーザー名を取得し、Jspページに表示するなど、一連の結果を返します.
ここで一般的な疑問がありますが、私のjavabeanはResultSetをJspに返しますか?それともCollectionですか?
私は時間図が手間を省いて、直接ResultSetに戻って、それから私のjspページの中で大量のResultSetが遍歴しました.これは、データ層と表示層を混同しています.EJB CMPでは、Collectionを返します.このようにカップリング性が低下し、データベース構造を変更した後、フロントJspページまでプログラムを変更する必要がなくなり、従来のphp Asp開発方式と変わりません.
ただし、Collectionに戻る効率はあまり高くありません.これは、メモリにすべての結果を格納するメモリを開くことを意味します.
見ましたhttp://builder.com.com/article.jhtml?id=u00220020814R4B01.htmこの文章の後、ヒントが大きいと思って、Iteratorに戻ればいいです.
Iteratorもモードで、JiveでIteratorを大量に使っていましたが、私は以前不思議に思っていました.なぜ彼は自分でIteratorを書くことができなかったのか、今は原因を知っています.このようにメモリを節約し、効率が高いです.
次のように比較します.
Iteratorを使用して戻るには、次の手順に従います.
ここで戻ってくるのは内部クラスですが、実はJiveのようにIteratorクラスを専門に作ることができます.そうすれば、ここはそんなに見苦しくありません.自分で定義したIteratorはCollectionのIteratorとは何の関係もありません.自分で3つの方法hasNext()を定義しました.next(); remove();これはCollectionのIteratorと同じように見えます.
自分が作ったこのIteratorクラスから見ると、このJavabeanはポインタ伝達の役割を果たしているだけで、本Javabeanを呼び出したポインタをResultSetに伝達することで、効率が向上し、メモリが節約され、カップリング性が低下しているのがミドルウェアの典型的な例と言える.
iteratorを返すのがこんなに良い以上、簡単なIteratorを返す方法をよく使う人がいます.
これはリストに直接戻るのと変わらず、メモリを無駄にしています.
ここで一般的な疑問がありますが、私のjavabeanはResultSetをJspに返しますか?それともCollectionですか?
私は時間図が手間を省いて、直接ResultSetに戻って、それから私のjspページの中で大量のResultSetが遍歴しました.これは、データ層と表示層を混同しています.EJB CMPでは、Collectionを返します.このようにカップリング性が低下し、データベース構造を変更した後、フロントJspページまでプログラムを変更する必要がなくなり、従来のphp Asp開発方式と変わりません.
ただし、Collectionに戻る効率はあまり高くありません.これは、メモリにすべての結果を格納するメモリを開くことを意味します.
見ましたhttp://builder.com.com/article.jhtml?id=u00220020814R4B01.htmこの文章の後、ヒントが大きいと思って、Iteratorに戻ればいいです.
Iteratorもモードで、JiveでIteratorを大量に使っていましたが、私は以前不思議に思っていました.なぜ彼は自分でIteratorを書くことができなかったのか、今は原因を知っています.このようにメモリを節約し、効率が高いです.
次のように比較します.
public List getUsers() {
ResultSet rs = userDbQuery();
List retval = new ArrayList();
while (rs.next()) {
retval.add(rs.getString(1));
}
return retval;
}
は、Collectionに戻った後で最も一般的な方法で、ResultSetのユーザー名をリストに追加して返します.メモリが消費されるのは明らかです.Iteratorを使用して戻るには、次の手順に従います.
public Iterator getUsers() {
final ResultSet rs = userDbQuery();
return new Iterator() {
private Object next;
public void hasNext() {
if (next == null) {
if (! rs.next()) {
return false;
}
next = rs.getString(1);
}
return true;
}
public Object next() {
if (! hasNext()) {
throw new NoSuchElementException();
}
String retval = next;
next = null;
return retval;
}
public void remove() {
throw new UnsupportedOperationException("no remove allowed");
}
}
}
ここで戻ってくるのは内部クラスですが、実はJiveのようにIteratorクラスを専門に作ることができます.そうすれば、ここはそんなに見苦しくありません.自分で定義したIteratorはCollectionのIteratorとは何の関係もありません.自分で3つの方法hasNext()を定義しました.next(); remove();これはCollectionのIteratorと同じように見えます.
自分が作ったこのIteratorクラスから見ると、このJavabeanはポインタ伝達の役割を果たしているだけで、本Javabeanを呼び出したポインタをResultSetに伝達することで、効率が向上し、メモリが節約され、カップリング性が低下しているのがミドルウェアの典型的な例と言える.
iteratorを返すのがこんなに良い以上、簡単なIteratorを返す方法をよく使う人がいます.
public Iterator getUsers() {
ResultSet rs = userDbQuery();
List list = new ArrayList()
while (rs.next()) {
list.add(rs.getString(1));
}
return list.iterator();
}
これはリストに直接戻るのと変わらず、メモリを無駄にしています.