Answers:
事件链接是个好主意吗?
在您使用它之前,这似乎是一个好主意。
没有某种类型的对顺序的隐式依赖,很难建立级联事件。很难设置它们而不会因无限循环和偶发的内存泄漏而引起问题。由于需要知道在何处附加和在何处层叠的事件引起的耦合,它们使类设计更加困难。
而且,他们非常难以调试和推理代码。
现在,有时可以在相对有限的场景中使用它们,其中代码的结构限制了其中一些问题。在UI中,级联事件可用于触发层次结构,因为该层次结构有助于限制所有权和循环问题。
不过,如今,我发现在构造器中接受此类可扩展行为的委托的可能性要比让任意行为在运行时闭锁的可能性高得多。
从曾经花了几天时间来追踪与事件链相关的错误的人的角度来讲,这是一个非常糟糕的主意。您正在隐藏控制流(如您所述),这会使调试成为一场噩梦。当有人添加一些错误处理代码以重置控件时,我出现了这种情况。这导致了一系列onPropertyChange
处理程序,这些处理程序最终刷新了具有错误处理程序的控件,导致该控件再次重置了另一个控件,依此类推。基本上,UI会简单地将CPU锁定为100%。
如果您有某种方法可以防止针对同一根事件多次触发事件处理程序,那么您或许可以避免这种情况,但是我可以想象您可能需要多个事件处理程序调用的情况。
一个潜在的缺点是,意外地以循环更新结束很容易。例如A-> B-> C-> A-> B ...
另一种方法是创建负责触发一系列事件的复合事件。这意味着您不应该最终陷入一个循环中,并给您一个捕获错误等的地方。我已经在此方面取得了一些成功,尽管公认没有将它用于任何特别复杂的事情(但!)。
{A + B} > C > {D & E}
<br>。它确实有助于在更短的时间内编写复杂的解决方案,但正如前面提到的,测试和调试仍然很痛苦。