Prev / Next / たまにっき。

検索結果を Iterator で返す?

Category: [OOD]
2005-08-12

検索結果が Iterator というのが激しく気持ち悪い.

「デザインパターン入門」に合わせて、本の例を示そう。数十万冊の本を持つ図書館データベースを考える。ここで、ユーザがある条件で本を検索したとしよう。例えば、著者が「鈴木太郎」の本、といった具合である。検索結果は、どのように返すべきであろうか?
検索された本のインスタンスをすべて生成してから、その集合を一度に返す、という仕様でも良いのであれば、Iteratorパターンを使う必要はない。しかし、この仕様には、次のような問題がある。
    * すべての結果が揃うまで、結果が返されない。最悪の場合、数十万冊の本の照合がすべて完了するまで、数時間かかる可能性もある。
    * 検索された本の冊数が多い場合、返される結果が巨大になる。最悪の場合、メモリ上に収まらない可能性もある。
このようなケースでは、Iteratorパターンを使うべきである。検索結果として、本の集合ではなく、Iteratorを返すのだ。

なぜ Proxy パターンを使わない!?

検索した結果に対しては、本の情報を参照することしかさせない、という意図を示すために、検索結果はBookShelfクラスではなく、Iteratorとして返すようにするのである。

検索結果は Immutable であるべきだが,Iterator を返すのは意味が違ってくるでしょう.

Category: [OOD]