私は同じ引数で繰り返し呼び出される習慣を持つクラスのセットを持っています。これらのメソッドは一般的にデータベース要求を実行し、オブジェクトなどの配列を作成するので、この重複を取り除くために、最適化するためにいくつかのキャッシングメソッドを構築しました。これらは、そのように使用されていますPHPでメソッドの結果キャッシュにデコレータパターンを実装する最も良い方法
適用キャッシングする前に:
public function method($arg1, $arg2) {
$result = doWork();
return $result;
}
適用キャッシング後:
public function method($arg1, $arg2, $useCached=true) {
if ($useCached) {return $this->tryCache();}
$result = doWork();
return $this->cache($result);
}
は、残念ながら、私は今、手動でのすべてにこれを追加する少し手間のかかる作業が残っていますメソッド - 私はこれがデコレータパターンの使用例だと信じていますが、この場合はPHPで簡単に実装する方法を理解できません。
すべてのいずれかのクラスのメソッドが自動的にこれを行うか、メソッドなどに1行追加するだけでよいでしょうか?
return文などをオーバーライドする方法を見てきましたが、実際には何も見えません。
ありがとうございます!
リスコフ置換の原則に違反し、Proxy Managerプロジェクトを見て、助けてくれると助かりました – decebal
@decebal '__call'を使ったアプローチは明らかですが、明示的にタイプセーフではないことが暗示されています。 「古典的な」デコレータは、同じインタフェースを実装しているためLSPに違反しません。 – Gordon