プラグインの代わりに書き換えを使用する明白な理由は、private、protected、またはfinalメソッドをオーバーライドする必要がある場合です。
ただし、次のシナリオも考慮してください。
最初のシナリオ(絶対ソート順):
書き換えは、プラグインの前にコードを実行する必要がある場合に役立ちます。プラグインを設定することでそれができることはわかっていますがsortOrder
、サードパーティのコンポーネントをインストールするとき(あなたではない)があなたのコードが常に最初であることを確認することはできません。
2番目のシナリオ(コードを除く):
メソッド内のコードの一部のみを除外または書き換える必要がある場合、プラグインは次善の方法である可能性があります。around
プラグインを使用して、の呼び出しを回避できることはわかっていますがproceed
、これによりスタック内の他のプラグインが破損する可能性があります。
3番目のシナリオ(コードスタイル):
振る舞いを書き換える必要がある場合は、書き換えを使用する必要があります。プラグインを使用して、出力を変更したり、前後にコードを実行したりする必要があります。
プラグインは、他のモジュールを壊さないように常に元のコードを実行する必要があります。
私の結論:
コアメソッドを入力と1つの出力を持つブラックボックスと見なすことができ、その内部メカニズムにとらわれない場合、プラグインが最適なオプションになる可能性があります。
内部の動作を変更する必要がある場合は、書き換えが最適なオプションである可能性があります。