5

私は classChatManagerを持っており、その中に aChatServerChatClient(WCF) クラスがあります。

をインスタンス化するコントローラが、ChatManagerにサブスクライブできるようにしたいと考えています。UserConnectedUserDisconnectedMessageReceivedChatClient

これを行うための最もエレガントで論理的な方法は何ですか? ChatClient私が持っているのと同じようにイベントを定義してからChatManager、イベントをコントローラーに渡すためだけにイベントを再定義するのはばかげていChatClientますか? はのChatManagerイベントをサブスクライブし、がリッスンするChatClient独自のイベントを起動します。ChatController

WPF にはイベントのバブリングの概念があることは知っていますが、ユーザー インターフェイスの一部ではないため、このタイプのシナリオのためかどうかはわかりません。

4

3 に答える 3

2

私は、ChatManagerChatController両方が自分自身の存在を正当化できるかどうかを疑問視することから始めます. 一般に、「Manager」クラスを作成していることに気付いたときはいつでも、特にそれが行っていることの一部がメッセージの中継のみで構成されている場合は、実際には必要ありません。

コントローラ クラスは、その「責任」が非常に広いため、SRP に対して苦労する可能性があります。特定の動作の責任を委任したい場合は、 の責任をコントローラーに任せ、必要に応じてクライアントと対話できるように (コントラクト インターフェイスを介して)ChatClientで下位のコントローラーを初期化します。ChatClientイベントの登録を開始するときは、部下またはクライアントを破棄する前にそれらのイベントの登録を解除するようにしてください。そうしないと、マネージ メモリ リークが発生します。

于 2012-12-19T21:35:22.357 に答える
1

あなたが探しているのはバブリングイベントではありません。親 (ChatManager) で子クラスのインスタンスを呼び出し、次のようにイベントをサブスクライブすることで、これらのイベントを簡単にサブスクライブできます。

chatManager.UserConnected += (param1, param2) => {
    //your code here
};
于 2012-12-19T21:35:03.140 に答える
0

イベントがサブスクライブするものに条件付きで到達する (または複数のハンドラーによって順次処理される) 必要がない限り、「バブリング」は本当に必要なものではありません。イベントアグリゲーターを使用するのがおそらく最善の方法です。

于 2012-12-19T21:25:06.410 に答える