1

在我当前的项目中,我们使用的是事件系统,它不带优先级地传播事件。我的意思是准确的。问题是事件的调用没有优先级,因此这意味着侦听类会触发它们的“消息”代码,以便将它们添加到侦听器容器中。

它有时会导致难以预测的难以分析的结果。

您是否知道任何现有的解决方案以“好的方式”处理事件排序?

4

3 回答 3

2

优先考虑事件是通往地狱的高速公路。没有字面意思。您需要跟踪哪些对象需要哪些优先级。然后你会用完优先级。接下来,您意识到您已经将相同的依赖项(优先级常量类)硬编码到 100 个类中,并且实际上已经将它们捆绑在一起。好吧,也许不是,但陷阱很多,而且不幽默。你得看看你想达到什么:你想按顺序执行流程。它与事件没有任何关系,除了这些过程是由事件触发的完全任意的事实。

有很多解决方案:

  1. 使用有限状态机,这是迄今为止最通用和最清晰的解决方案。
  2. 隔离需要由一个特定事件触发的顺序执行的进程并以某种方式将它们排队,例如使用命令模式并触发事件队列中所有命令的执行。或者使用Promise也是一种可能。
  3. 事件链的正确方式:如果 ClassA 需要响应事件 A,但只有在 ClassB 完成处理之后,那么 ClassA 不应该响应事件 A,而是响应从 ClassB 分派的事件。最不可取的是,但有时你需要快点。
于 2013-03-21T18:33:28.823 回答
1

在您的侦听器类中添加某种依赖标志。也就是说,假设监听器 A 被调用,它依赖于监听器 B,然后让 B 先执行。类似地,您可以将依赖条件放在所有侦听器类中,从而创建所需的层次结构。

只要确保你没有添加循环依赖或小心处理它。

于 2013-03-21T14:29:38.253 回答
1

可能对您有利。PriorityBlockingQueue使您的事件实现可比,并且事件调度程序线程每次都消耗最高优先级的事件。

于 2013-03-21T14:29:42.513 回答