我正在寻找一种模式,不确定它是否存在。
我正在使用 xstream,最近遇到了这个问题。我想根据彼此的因果关系/依赖性来匹配事件。
假设 E1(在 Stream1 中)和 E11(在 Stream11 中)导致 E2(在 Stream2 中)。后来,E2 导致 E3(在 Stream3 中)。当 E3 发生时,我想知道 Stream1 上的哪个事件导致了 E3,所以我正在寻找 E1,但是我如何找到它呢?
我在理论上有 3 个想法,1 在实践中似乎是垃圾。
- 每个事件也会将它们的“父母”数据复制到自身中,因此可以就地访问整个历史记录。问题是它不能缩放(循环),让我想起冷流,但更糟。嵌套数据,空间密集。
- 每个事件都包含对导致它的“父母”的引用,因此可以回溯。扁平数据,对数据的访问主要依赖于计算,但也必须解决空间(无限历史?)。
- 创建一个专门的“历史”流(或者只是一个简单的列表?),它具有历史事件,其中包含通过引用以下形状的事件来包含因果关系信息:{parents: Event[], child: Event}。稍后我可以通过过滤回溯事件。或者这个历史容器可能不仅仅是一个列表/流,而是一个为此目的优化的对象。空间(无限历史?)也必须解决。
你怎么看?您对这个问题有任何想法/参考 - 也许是 FRP 世界中的一些东西?对我来说,这有点像“范围界定”的事情。
这一遍又一遍地出现,对我来说,这看起来比我滥用工具要糟糕得多。但也许我是。:)