私はそのようなものに要約できるオープンソースライブラリを構築しています:
class SuperThing {
public function doStuff($object) {
// ...
}
}
ライブラリのユーザーがカスタム動作を追加できるようにしたいと考えています。
たとえば、操作の特定の時点でログを挿入したり、特定の時点でオブジェクトを変更したりする場合があります。
私はそれを行う2つの方法を見ます:
テンプレート メソッドパターンは適切に思えますが、保護されたメソッド ( など) を大量に追加する必要があり、ライブラリのユーザーは自分の動作を追加するためにクラスを拡張する必要があります。
beforeDoingThingA()
afterDoingThingA()
イベントの使用:
SuperThing::doStuff()
イベントを発生させ、ユーザーは好きなように登録できます。
イベントの使用は、私にとってよりシンプルで明確で保守しやすいように思えます...
しかし、イベントは主に、何かが起こったというメッセージを送ることだと思います。誰かが操作に「フック」して一部のオブジェクトを変更することはできません。多分私はこれについて間違っています。
では、イベントはこの状況に適していますか? そうでない場合、テンプレート メソッド パターンに代わるものはありますか?