wolkenkit中的自复位循环流

时间:2018-08-23 11:28:39

标签: wolkenkit

我对状态流有疑问,我将尝试将其分解为一个非常简单的示例: 我正在使用不同的状态,可以说是原始的,添加的和计算的。 我的状态由一个要添加的int组成,在两次添加后,我想计算加倍的数量,然后再次将其设置为原始。 因此,现在我将以原始流int = 0开始。在转换中,我对addNumber事件做出反应,从事件数据中取出一个int并将其添加到我的状态,然后我{{1 }}。 我重复一遍,添加另一个数字和transitionTo('add')。 在我的反应中,我现在对加法和计算之间的过渡作出反应,并将新状态设置为将int数量加倍。 我现在要使用的是该号码,例如发送包含该号码的命令,然后重置状态和transitionTo('calculate')。 问题是:我无法设置状态,也无法转换。 您如何解决这个问题?

在这里您具有实际的代码,因此它变得更容易理解:

transitionTo('pristine')

https://gist.github.com/DrFelder/122a72ffed3eb239a1a3ae33c99ea00d

1 个答案:

答案 0 :(得分:2)

基本上,对此有两种想法:

  1. 第一种选择是质疑您是否应该在此处使用流。也许您可以使用startWorkendWorkpauseresume等命令,以所需的状态,将其建模为一个聚合,然后您可以拥有自己的逻辑希望包含在该聚合中。您可以每人使用一个汇总,也可以每个状态块使用一个汇总。无论哪种方式,这都应该起作用。因此,换句话说:为什么要以流而不是聚合的方式实现这个特殊的原因?
  2. 第二个选项是pristinecalculating之间没有区别。因为,您实际上想要拥有的是某种圆形,但是您的流程并未建模为圆形。因此,如果您不是最终过渡到calculating,而是过渡到pristine,而是处于所需状态,并且在present->pristine的反应之内,则可以执行所需的计算并发送带有计算数据的命令(实际上,对过渡的反应)。

这有助于澄清一些事情吗?

PS:也许更明确地命名也将有所帮助,例如具有pausedresumed而不是pauseSwitched。这将需要较少的逻辑来弄清楚发生了什么事情的意图,而这基本上是DDD的优势之一,使其具有在措辞上明确的能力。因为,正如它现在所命名的,它更多是一种updated事件(应该避免)。