ここで、明確で明確な答えを見つけることはできません。概して、あなたとあなたのユーザーがそれらを必要とする場所で、モジュール内のイベントをディスパッチする必要があります。必要な場所を考えることができない場合、それらをディスパッチする必要はありません。Magento自体は、非常に多くの異なる場所(コントローラーのプリ/ポストディスパッチ、任意のcrud操作など)で非常に多くのイベントを発行するため、モジュールは何もせずに多くの有用なイベントを既にディスパッチします。
それは満足のいくものではないので、ユーザーがアイテムを追加、削除、変更、または元のアクションとは独立した別のアクションを実行するアクションをモジュールが実行したときに、モジュールからイベントをディスパッチする必要があります。例えば- Magentoのは、持っているvisitor_init
イベント自動生成されたイベントのその標準スイートの一部ではありません。このイベントにより、プログラマーはMagentoがデータを記録する前に訪問者オブジェクトを変更できます。これらは、元のモジュール開発者が決定論的に知る方法ではありませんでしたこれは、イベントを追加する必要がある場所でした。おそらく、機能要求やシステムユーザーとのインタビューから発生したものです。ユーザーが何を望んでいるかを理解し、管理者を介してUI / UXを構築することが不可能/実用的でない場合、イベントフックを追加して、別のプログラマーがそれを行えるようにします。
あまりセクシー、追加イベントも(ユーザー、あるいはいずれかの開発を可能にするために安価な方法することができ、あなたのすべての人の恐れが触れることのコードの危ないビットにいくつかの機能を追加するためにチームを)。あなたのPLOP dispatchEvent
、コードの途中で電話をそこにフック、そしてあなたは、元のスコープ内のコードを乱すことなく、あなたの機能を追加することができます。[編集者:また、ある時点でそのひどいコードをリファクタリングする必要があります]
パフォーマンスに関しては、ディスパッチにイベントを追加する場所は追加する場所によって異なります。dispatch
イベントを呼び出すとき、Magentoは追加のPHP呼び出しをいくつか行い、構成済みのオブザーバーの構成を照会してから、オブザーバーを呼び出す必要があります。一度行うと、これは標準のMagentoディスパッチの範囲で安価に追加されます。ただし、繰り返し実行されると(たとえば、すべてのブロックがレンダリングされる前に)、これが追加される可能性があります。ここには良い経験則はありません-常に正しい答えはプロファイルです。
最後に、Magento 2のw / r / tは、言うには時期尚早です。上記はすべて適用されますが、プラグインシステムはいくつかのしわを追加します。プラグインは、ある観点から見ると、Magentoのパブリックメソッド呼び出しの動作のようなイベントを作成する方法です。理論的には、クラスを正しく設計していれば、イベントは必要ありません。ただし、実際には、別の方法が長いリファクタリングプロセスである場合、Magento開発者にとっては、イベントを保護されたメソッドコードまたはプライベートメソッドコードにドロップすることは魅力的なソリューションになります。また、特定の名前のイベントを作成すると、多くの場合、モジュールを使用する開発者にとって使いやすいエクスペリエンスが作成されます。
お役に立てば幸いです!