「メッセージパッシング」と「イベントベース」の混乱の多くは、アーキテクチャの詳細と実装の詳細に関係しています。OSが提供するメッセージを実装するためのメッセージを実際に使用するイベント駆動型システムを見てきました(そして記述しました)。あなたは本当に建築のアイデアに言及していると思います。
多くの人がすでに「メッセージパッシング」と「イベントベース」を指摘しているように、あいまいさを避けるのに十分な用語ではありません。
「メッセージパッシング」システムと「イベントベース」システムの相対的なメリットは何ですか。
メッセージの受け渡し
まず、「メッセージパッシング」システムと言うとき、あるオブジェクトが特定の他のオブジェクトへのメッセージを費やすシステムについて話していると思います。このパラダイムに基づいたシステムを考えるとき、より一般的には、何かを検出するオブジェクトが、誰かに何かを伝える必要があることを知っているシステムを考えます。(私はそれが知っている方法を指定しているのではなく、知っていることだけを指定しています。)
このタイプのアーキテクチャは、生産者と消費者がよく知られているシステムに非常に適しています。メッセージのプロデューサーは、誰がメッセージを受信する必要があるかを知っているか、または消費者はメッセージの送信元を知る必要があります。
銀行のアプリケーションを作成している場合、トランザクションの送信者と送信者を本当に知りたいと思うでしょう。
イベントベース
「イベントベース」システムと言うとき、あなたが考えているもう一つのシステムは、誰が(誰でも)応答するかを知らずにオブジェクトが「イベント」を発生させるシステムです。
このタイプのイベント駆動型アーキテクチャは、プロデューサーがイベントの消費者を気にかけないシステムや、消費者がイベントの生成者を気にしないシステムに非常に適しています。
一般に、これらのシステムは、消費者と生産者の関係がわからない場合や、関係が動的であると予想される場合に最適です。
これを使用したシステムの1つは、実行時にロードされた動的に構成されたモジュール(プラグイン)でアプリケーションが実際に構成されたシステムでした。モジュールがロードされると、そのモジュールは関心のあるイベントを登録します。その結果、機能を非常に簡単に拡張できるシステムができました。
たとえば、条件AでイベントEAが発生し、通常は応答RAが発生したとします。応答RAを引き起こしたオブジェクトは、イベントEAを受信するために登録され、到着したときにアクションを実行しました。ここで、RA_1と呼ばれる新しい応答をEAに追加するとします。これを行うには、EAを探して応答RA_1を生成する新しいオブジェクトを追加するだけです。
以下にいくつかの例を示します(用語を使用):
- 「メッセージの受け渡し」:上司からタイムシートに記入するように指示されます。
- 「イベント駆動型」:部門長官が全員にメールを送信し、今日のタイムシートが期限であることを通知します。