gpt4 book ai didi

events - 事件驱动架构……无限循环

转载 作者:行者123 更新时间:2023-12-04 04:32:24 25 4
gpt4 key购买 nike

我有一个事件驱动的架构,其中 A 等待 B 的更改,B 等待 C 的更改,C 等待 A 的更改,形成一个循环。

现在,如果 B 发生变化,则 A 向 C 触发一个事件,C 触发事件,B 触发事件,A 触发事件,C 触发事件……无穷无尽。

我现在可以更改我的程序以不包含此循环,但我担心我可能会在以后将自己置于无法做到的角落。在设计基于事件的系统时,如何防止此类事情发生?

最佳答案

这里的每个人似乎都说循环依赖是不好的。这在某种意义上是正确的,我试图不惜一切代价避免静态循环依赖。您可以使用此博客中概述的控制反转来做到这一点:http://blog.schauderhaft.de/2011/07/17/breaking-dependency-cylces/

但是你所描述的不一定是静态循环依赖,而是运行时的依赖。我不完全确定,但我认为在运行时避免循环依赖或多或少是不可能的。但是当然这不应该导致无限循环。为了解决这些问题,我看到了两个半选项

首先是黑客

确保由另一个事件触发的每个事件都有对原始事件的引用(或有关它的基本信息,如 id)。当你处理一个事件时,确保它不是来自你自己。

优点:易于实现;绝对防止递归

黑客的另一半

如果您正在运行同步,您可以设置一个标志 firingEvent之前和之后重置它。忽略同时发生的事件 firingEvent设置。

优点:更容易实现;在单线程中运行时绝对防止递归

语义丰富的解决方案

我确信 A 在某个外部触发器上触发的事件和 A 因为 C 触发而触发的事件实际上是两个不同的事件,或者所有三个事件实际上只是一个可能来自尚未确定的源 D 的事件。或者类似的东西。如果没有信息,就无法知道 A、B 和 C 是什么以及它们正在触发什么事件。如果您找到合适的事件,循环就会消失。

优点:设计将更简洁并包含更多信息。

关于events - 事件驱动架构……无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3688117/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com