Webベースのアプリケーションを使用する場合、頻繁に変更されないクエリ結果(または計算能力がかなり必要な複雑な計算結果)は、メモリまたはファイルベースのデータストアにキャッシュされます。 これらの結果は、リクエストごとに変更される可能性がありますが、アプリケーション内のいくつかのクラスによって消費される場合、SOLIDを維持しながらリクエストの間この情報をキャッシュするにはどうすればよいでしょうか?リクエスト中に再計算や二重クエリを避けるための良い設計パターンは何ですか?
私が見ている最も単純な解決策、そして私が今実装しているのは、結果がすでに計算/取得されているかどうかをチェックしているかどうか、そうでない場合は計算して変数に格納することです。次のように私はこのアプローチを見
public function getSomething()
{
if(! isset($this->something))
{
$this->something = $this->calculateSomething();
}
return $this->something;
}
問題は、次のとおりです。
- 私はどこでも私は「何か」を必要とすることを確認する必要があり、私は、同じオブジェクトインスタンスへのアクセス権を持っている(または私は使用することができます静的変数はさらに悪化する)。これは、依存関係注入を使用し、そのクラスからインスタンスを要求するたびに同じものが返されることを確認することで実現できますが、どういうわけか私は間違った問題に大丈夫な解決策を適用していると感じています。最終的に私のアプリは特定のインスタンスの依存関係で満たされます。私はこれが悪いことかどうか本当にわからない、私を修正するために自由に感じる。
- 私のクラスは、本質的に同じことをしているこれらのif文で満たされます。 (変数が設定されているかどうかをチェックし、設定されていない場合は変数を設定して返します)。
私はもっと良い解決策を探していましたが、リクエストを1回だけキャッシュするだけでは(デコレータパターンを使用してクラスをきれいに保つ)こともできませんでした。
この共通の問題を解決するうえで、どのような方法で実装することができますか?
ご質問ありがとうございます!私はあなたがこれを尋ねたので好奇心旺盛でしたが、私は自分で答えを見つけませんでした。 – CodeShark