レイジーロード
必要なすべてのデータを保持しないが、それらを取得する方法を知っているオブジェクト
詳細な説明は、P of EAA ページ 200 を参照してください
データベースからメモリにデータをロードする場合は、対象のオブジェクトをロードするときに関連するオブジェクトもロードするように設計することで便利です。これにより、オブジェクトを使用する開発者の負担が軽減され、そうでなければ必要なすべてのオブジェクトを明示的にロードする必要があります。
ただし、これを論理的に結論付けると、1つのオブジェクトをロードすると、関連する多数のオブジェクトをロードする必要があるというポイントに達します。実際に必要なオブジェクトがわずかである場合、これはパフォーマンスに悪影響を及ぼします。
レイジーロードはこのロードプロセスをしばらく中断し、オブジェクト構造にマーカーを残して、データが必要な場合にのみ使用時にロードできるようにします。多くの人が知っているように、物事を怠ければ、実際にはまったくそれらをする必要がないことが判明した場合に勝利します。
レイジーロードには4つの主な種類があります。遅延初期化は、フィールドがロードされていないことを示す特殊なマーカー値(通常は null)を使用します。フィールドへのすべてのアクセスはマーカー値のフィールドをチェックし、ロードされていない場合はロードします。仮想プロキシは、実オブジェクトと同じインターフェイスを持つオブジェクトです。そのメソッドの1つが初めて呼び出されると、実オブジェクトをロードしてから委任します。バリューホルダーは getValue メソッドを持つオブジェクトです。クライアントは getValue を呼び出して実オブジェクトを取得し、最初の呼び出しはロードをトリガーします。ゴーストはデータを持たない実オブジェクトです。メソッドを初めて呼び出すと、ゴーストは完全なデータをそのフィールドにロードします。
これらのアプローチはいくつかの点で微妙に異なり、さまざまなトレードオフがあります。組み合わせアプローチを使用することもできます。この本には完全な議論と例が記載されています。