S eda1a14b50ee24bcab19b62f40858e76 レイジーロード

遅延読み込み。データが必要な時に読み込みに行く。
クライアントからはそのような処理をしていることは一切見えなくする。
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の例ではレジストリを使って、データソースにアクセスしている。なんだか溜息つきたくなるような実装。


注意点

・データベースアクセスが増加するかもしれない
・レイジーロードを使わない場合と比べてほとんど負荷が変らないなら別に使わなくていいかも
・追加のデータベース呼び出しを必要とする場合に使う

もしかして

    他の人の「レイジーロード」

    S eda1a14b50ee24bcab19b62f40858e76

    無所属ソフトウェアエンジニア

    (1722words)

    最新

      最新エントリ

        関連ツイート