2016-03-31 18 views
1

現在、サードパーティのAPIにHTTPリクエストを行うため、キャッシュソリューションのメリットが大きい小さなクラスを開発しています。カスタムクラスまたはライブラリにサードパーティのキャッシュを実装する方法

私は実際に特定の事前実装のキャッシュソリューションにユーザーを強制したくありません。私はまた、使い方を本当にシンプルにしたい。

代わりに、クラスのユーザーに使用するキャッシングメカニズムを決定させることをお勧めします。

この場合、ベストプラクティスの実装は何ですか?

私は、単純なゲッター/セッターメソッドが適切だろうと思った:

$class->retrieveFromCache(function() { 
    return UserDefinedCache::get('user_defined_key'); 
}); 

$class->writeToCache(function($value) { 
    UserDefinedCache::set('user_defined_key', $value); 
}); 

これは彼または彼女が望んでいるものは何でもキャッシュを使用するようにユーザーを支援します。実装と使用状況を簡単に保ちます。

クラスに加えて、クッキーから値を格納して取得する必要もあります。同様の方法でアクセサーを実装します。したがって、ユーザーは自分の環境またはフレームワークに最も適したCookieメカニズムを自由に使用できます。

$class->getCookieValue(function() { 
    return $_COOKIE['custom_name']; 
}); 

$class->setCookieValue(function($value) { 
    setcookie('custom_name', $value); 
}); 

これは実装に適していますか?私が見落としたいくつかの欠点はありますか?または、より良い解決策がありますか?

答えて

0

I would follow the PSR-6 proposal

複数のアダプタを使用する場合は、これをアーカイブするにはいくつかの方法があります。このような工場がある

$cacheInstance = CacheFactory::get('MyFancyCacheAdapter', ['options' => 'here']); 

これは、指定されたアダプタの構成済みのインスタンスを返します。アダプターはPSR-6 CacheItemPoolInterfaceを実装する必要があります。

ただし、すべてのキャッシュエンジンまたはアダプタで同じインターフェイスを実装して、簡単に切り替えて操作できるようにすることが重要です。

もう一方で、私は車輪を再発明しようとしませんでした。既によく行われているキャッシュライブラリlike this one for exampleがあります。あなたがそれを気に入らなければ、他の多くのものを見つけることができると思います。

さらに、クラスはクッキーから値を格納して取得する必要があります。同様の方法でアクセサーを実装します。したがって、ユーザーは自分の環境またはフレームワークに最も適したCookieメカニズムを自由に使用できます。

クッキーはキャッシュではありません。技術的には、キャッシュエンジンを実装してデータをクッキーに格納することができますが、これは誤解を招きやすく、技術的に不適切で、懸念の分離の原則に従わないと思います。

+0

多分、私ははっきりとは分かりませんでした。私はそれを簡単にしたいと思います。例えば。私のライブラリのユーザは自分のmysqlデータベースをキャッシュとして使うこともできます。私は実際にキャッシング・インターフェースを適応させることを強く求めているわけではありません。私はまた、サードパーティのキャッシュ依存関係で私のライブラリを吹き飛ばしたくありません。 クッキーについて:これらはキャッシュとして使用しないでください。ライブラリは、エンドユーザのクッキーに何らかのデータを書き込む必要があります。私は実際には、クッキーヘッダーを追加することによって、図書館が使用されるプロジェクトを台無しにしたくはありません。この動作は、ライブラリのユーザーが制御する必要があります。 –

+0

インターフェイスを実装せず、異なるキャッシュバックエンドを許可したい場合は、それを強制することは絶対に意味がありません。シンプルではあるが一般的なパターンに従わない場合は、各キャッシュのクラスを作成し、ゲッターとセッターを実装するだけです。それ以外の場合、私はあなたの問題を取得しません。 – burzum

関連する問題