0

それ以来、コード内のほとんどのイベント(WPFコントロールプロパティをコードに接続するイベントを除く)に管理したイベントを使用する代わりに、イベントアグリゲーターを使用してメッセージを公開する方法を学びました。現在の問題は、ハンドラーでサービスを実際に過負荷にしているように見えることです。GitHubの周りをクルージングすると、人々がイベントアグリゲーター(バスなどの別の名前をとるように見える)を実装し、各タイプのメッセージを処理するクラスを作成するのを見ることができます。

例えば:

public class SomeHandler : IHandle<SomeMessage>
{
    private readonly IEventAggregator _eventAggregator;

    public SomeHandler(IEventAggregator eventAggregator)
    {
        _eventAggregator = eventAggregator;
        _eventAggregator.Subscribe(this);
    }

    public void Handle(SomeMessage message)
    {
        Console.WriteLine("Handled SomeMessage.");
    }
}

このタイプのプログラミングに使用される用語は何ですか?それについてもっと知りたいのですが。

4

2 に答える 2

4

これは特に古典的なメディエーターパターンに基づいています:

メディエーターパターンを使用すると、オブジェクト間の通信はメディエーターオブジェクトでカプセル化されます。オブジェクトは相互に直接通信するのではなく、メディエーターを介して通信します。これにより、通信するオブジェクト間の依存関係が減少し、結合が低下します。

特定のコード例は、CaliburnMicroの EventAggregatorを使用しているようです。メディエーターパターンの現在の実装の多くは「イベントアグリゲーター」と呼ばれ、MVVMパターンライブラリの一般的なコンポーネントです。これはメッセージングパターンです。

メッセージングパターンに関しては、次の本が興味深いはずです。

エンタープライズ統合パターン:メッセージングソリューションの設計、構築、および展開

メッセージングを使用してアプリケーション内のコンポーネントを分離することよりも、システム統合にメッセージングを使用することが重要です。

于 2011-08-15T19:01:09.857 に答える
3

私はむしろそれをpub/subscribeと呼びたいです。

もう少し最近のアプローチは、制御の反転を使用してメッセージのすべてのサブスクライバーを取得することです。

var subscribers = _container.ResolveAll<ISubscriberOf<IMyMessage>>();
foreach (var subscriber in subscribers)
{
    subscriber.Handle(myMessage);
}

また、「イベント駆動型アーキテクチャ」をグーグルで検索して、より興味深い実装を見つけることもできます。

于 2011-08-15T19:21:09.797 に答える