事件聚合器是否应该用于点对点或广播消息传递

本文关键字:点对点 用于 广播 消息传递 是否 事件 | 更新日期: 2023-09-27 18:33:33

我在Windows Phone 8应用程序中使用Caliburn.Micro中的EventAggregator

视图模型在很多地方实现了IHandle<SomeClass>

我的问题是,当发布SomeClass对象时,将处理多个类,即使它们可能不是预期的收件人。那么处理这个问题的最佳方法是什么?

  1. 设计具有不同名称(但本质上内容相同的)的消息类,以便视图模型之间的所有通信都是严格点对点的?

  2. 或者将源属性放在消息类中,以便所有接收方都知道消息的来源,以便可以有条件地处理它?

事件聚合器是否应该用于点对点或广播消息传递

这个问题没有正确或错误的答案。在我看来:

  1. 在某些情况下,您需要点对点,并且仅为此目的使用特定的消息类型(类)是可以
  2. 在某些情况下,您想要类似(广播)行为的事件
  3. 您还可以使用主动取消进行广播,就像您在 System.Threading.Task 中所做的那样,或者像 WPF 事件模型中的那个一样,其中每个处理程序都是访问者,并且可以将事件参数(例如 SomeClass)的 Handle 标志设置为 true,以便其他处理程序知道他们不应该再处理它。

此外,EventAggregator名称通常指出这样一个事实,即它最常见的用途是聚合处理程序,即进行广播(至少我是这样认为的)

将 WPF 事件模型视为类比。您引发事件(发布它),但并不真正关心您有多少处理程序或它们在做什么。