この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

CacheBuilder インターフェースを使用した安全な値のキャッシュ

プラットフォームキャッシュのベストプラクティスは、null を返すキャッシュ要求のテストを行い、Apex コードでキャッシュの欠落が処理されるかどうかを確認することです。このコードは各自で記述できます。また、Cache.CacheBuilder インターフェースを使用すると、セッションや組織のキャッシュで値を安全に保存または取得しやすくなります。

Apex クラスで何をキャッシュするかを宣言するだけでなく、CacheBuilder インターフェースを実装する内部クラスを作成します。このインターフェースには、doLoad(String var) という 1 つのメソッドがあり、doLoad(String var) メソッドの引数に基づいてキャッシュ値を構築するロジックのコードを作成して上書きします。

CacheBuilder でキャッシュした値を取得するために、doLoad(String var) メソッドを直接コールすることはありません。代わりに、CacheBuilder を実装するクラスを初めて参照するときに Salesforce が間接的にコールします。値が存在する場合は、それ以降のコールでキャッシュから値が取得されます。値が存在しない場合は、値を構築するために doLoad(String var) メソッドが再度コールされ、その後その値が返されます。そのため、CacheBuilder インターフェースを使用しているときは、put() メソッドを実行しません。doLoad(String var) メソッドによってキャッシュの欠落がチェックされるため、null 値を確認するコードを各自が記述する必要はありません。

例を見てみましょう。Visualforce ページの Apex コントローラクラスのコードを記述しているとします。Apex クラスで、ユーザ ID を基にユーザレコードを検索する SOQL クエリを実行することがよくあります。SOQL クエリは高価である可能性があります。また、通常、Salesforce ユーザレコードは頻繁に変更されません。そのため、ユーザ情報が CacheBuilder の適切な候補になります。

コントローラクラスで、CacheBuilder インターフェースを実装して、doLoad(String var) メソッドを上書きする内部クラスを作成します。次に、ユーザ ID をそのパラメータとする doLoad(String var) メソッドに SOQL コードを追加します。

1class UserInfoCache implements Cache.CacheBuilder {
2    public Object doLoad(String userid) {
3        User u = (User)[SELECT Id, IsActive, username FROM User WHERE id =: userid];
4        return u;
5    }
6}

組織のキャッシュからユーザレコードを取得するには、UserInfoCache クラスとユーザ ID を渡す Org.get(cacheBuilder, key) メソッドを実行します。同様に、Session.get(cacheBuilder, key)Partition.get(cacheBuilder, key) を使用して、それぞれセッションまたはパーティションのキャッシュから値を取得します。

1User batman = (User) Cache.Org.get(UserInfoCache.class, ‘00541000000ek4c');

get() メソッドを実行すると、Salesforce が、文字列 00541000000ek4c と UserInfoCache で構成される一意のキーを使用してキャッシュを検索します。キャッシュ値が検出された場合は、その値が返されます。この例のキャッシュ値は、ID 00541000000ek4c に関連付けられたユーザレコードです。値が見つからない場合は、Salesforce が UserInfoCachedoLoad(String var) メソッドを再度実行して (および SOQL クエリを再度実行して)、ユーザレコードをキャッシュしてから、そのレコードを返します。

CacheBuilder のコーディング要件

CacheBuilder インターフェースを実装するクラスのコードを記述するときは、次の要件に従います。

  • doLoad(String var) メソッドは、そのメソッドのコードでパラメータを使用しなくても、String パラメータを取る必要があります。Salesforce は文字列とクラス名を組み合わせて、キャッシュ値の一意のキーを構築します。
  • doLoad(String var) メソッドは常に値を返す必要があります。null を返すことはできません。戻り値はどのデータ型でも構いませんが、適切なデータ型に変換します。
  • CacheBuilder を実装するクラスは非静的でなければなりません。Salesforce がクラスを新たにインスタンス化し、doLoad(String var) メソッドを実行してキャッシュ値を作成するためです。