遅延読み込み。データが必要な時に読み込みに行く。
クライアントからはそのような処理をしていることは一切見えなくする。
O/Rマッピングのパターンとして紹介されてるけど、色んな場面で使えると思う。
実装例
4つの方法があるんだと。
・レイジーイニシャライズ
・仮想プロキシー
・バリューホルダー
・ゴースト
レイジーイニシャライズ
よく使う。
pages)){
$this->pages = $this->loadPages();
}
return $this->pages;
}
仮想プロキシー
GofのProxy パターン
バリューホルダー
たぶん、こういうのかと。
holder = $holder;
}
function getValue(){
return $this->holder->getValue();
}
}
interface Loader{
function load();
}
class Holder{
private $loader;
private $value;
function __construct(Loader $loader){
$this->loader = $loader;
}
function getValue(){
if (!isset($this->value)){
$this->value = $this->loader->load();
}
return $this->value;
}
}
$r = new Record(new Holder(new LoaderImpl()));
$r->getValue();
ゴースト
データマッパーで、ドメインオブジェクトのプロパティを遅延読み込みする方法っぽい。PofEAAの例ではレジストリを使って、データソースにアクセスしている。なんだか溜息つきたくなるような実装。
注意点
・データベースアクセスが増加するかもしれない
・レイジーロードを使わない場合と比べてほとんど負荷が変らないなら別に使わなくていいかも
・追加のデータベース呼び出しを必要とする場合に使う