5

我有一个类ChatManager,其中有一个ChatServer和一个ChatClient(WCF)类。

我希望我的控制器实例化ChatManager能够订阅和上UserConnected的事件。UserDisconnectedMessageReceivedChatClient

最优雅和最合乎逻辑的方法是什么?ChatClient以我的方式定义事件,然后重新定义事件,ChatManager仅将事件传递给控制器​​,而无需处理或了解控制器,这对我来说是愚蠢的ChatClient吗?TheChatManager将订阅 的事件ChatClient,然后触发它自己ChatController正在监听的事件。

我知道 WPF 有事件冒泡的概念,但我不知道这是否适用于这种类型的场景,因为没有任何东西是用户界面的一部分。

4

3 回答 3

2

我会首先质疑两者是否都ChatManager可以ChatController证明自己的存在。通常,当您发现自己创建了一个“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 回答