レイジーロードの履歴
遅延読み込み。データが必要な時に読み込みに行く。
クライアントからはそのような処理をしていることは一切見えなくする。
O/Rマッピングのパターンとして紹介されてるけど、色んな場面で使えると思う。
実装例
- レイジーイニシャライズ
- 仮想プロキシー
- バリューホルダー
- ゴースト
レイジーイニシャライズ
function getPages(){ if (isset($this->pages)){ $this->pages = $this->loadPages(); } return $this->pages; }
仮想プロキシー
Proxy パターン
バリューホルダー
たぶん、こういうのかと。
class Record{ private $holder; function __construct(Holder $holder){ $this->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();