回答:
システム内のパブリックメソッドの動作を変更/置換できるため、プラグインは偏在しています。可能な場合は、@api
アノテーション(安定したパブリックAPI)でマークされたパブリックメソッド/クラスのプラグインを使用してカスタマイズする必要があります。このようなアプローチにより、新しいMagentoのリリース後もカスタマイズが機能し続けることが保証されます。質問で言及されたbefore
/ after
プラグインに加えて、around
元の動作を置き換えるプラグインを作成することができます。
一方、オブザーバーはMagento 1から継承されたレガシー拡張メカニズムであり、かなり制限されているため、可能であれば回避する必要があります。ただし、プラグインとは異なり、保護/プライベートメソッド内に拡張ポイントを提供する場合があります。
Magentoテクニカルガイド(https://devdocs.magento.com/guides/v2.1/coding-standards/technical-guidelines.html#14-events)によると:イベントに渡されるすべての値(オブジェクトを含む)がイベントオブザーバで変更されました。代わりに、関数の入力または出力を変更するためにプラグインを使用する必要があります。
私にとって、プラグインとオブザーバーの主な違いは次のとおりです。
checkout_submit_all_after
イベントのオブザーバーを作成できます。注文が正常に行われた後、オブザーバーがトリガーされます。