我有几个指标需要“始终保持最新”。即当有任何改变时,我需要重新计算“依赖”。我有几个级别,只有在计算上一个级别时才应该计算每个下一个级别。让我通过这张闪亮的图片来解释:
在某个时候假设法郎发生了变化。那么我们应该:
- 计算法郎 / 第纳尔
- 计算法郎 / 第纳尔 / 比索
或者,如果同时更改比索、法郎和第纳尔,那么我们应该:
- 计算法郎 / 第纳尔
- 计算法郎 / 第纳尔 / 比索
- 计算比索 + 欧元 / (欧元 + 美元)
因此,无论何时发生任何Level 0
变化,我们都应该重新计算所有其他级别。但
- 我们应该只计算必需的项目。如果欧元改变,我们不需要重新计算法郎/第纳尔
- 我们不应该计算任何东西超过一次。如果欧元和美元同时更改,我们应该只计算一次欧元 + 美元(而不是两次)。
最直接的解决方案是:
- 将每个级别存储在数组中
- 对于数组中的每个项目跟踪来自下一级的“听众”(可能很困难,因为例如比索有来自不同级别的听众 - 来自 Level2 的 Franc / Dinar / Peso 和来自 Level 3 的 Peso + Euro /(Euro + Usd),所以两个 -需要维度数组..)
- 如果项目被重新计算,则标记所有它的侦听器也被重新计算
- 从 0 级到最后一级并重新计算标记为要重新计算的项目(最初更新的项目是要重新计算的市场,例如比索)。
我想我的问题是众所周知的,也许你可以建议我一般的众所周知的解决方案。我不想重新发明轮子:) 谢谢!