我的想法是通过spring statemachine跟踪域对象的状态。即statemachine定义如何转换域对象的状态。当事件被持久化/恢复到事件存储中时,可以通过将事件发送到状态机来(重新)生成域对象的状态。
但是,创建一个statemachine对象似乎相对昂贵,每当域对象发生状态转换时,创建状态机对象并不是那么高效。如果我只维护一个statemachine对象,我会担心并发问题。一种方法是拥有一个“状态机池”,但如果我必须为多个不同的域对象创建statamachines,它会变得混乱。
将spring statemachine应用于事件源模式是一个好主意吗?
答案 0 :(得分:1)
如果所有转换都基于事件,我会说这是一个非常好的主意,是的。
关于事件来源的要点是,您存储导致特定状态的事件 - 而不是仅存储当前状态 - 以便您可以将它们重播到给定的时间点。
因此,使用事件源对您创建状态机的方式没有影响。
但是,创建状态机对象似乎相对昂贵,只要在域对象上发生状态转换时创建状态机对象就不是那么高效。
每次状态转换时创建状态机与事件源都无关。如果你只存储当前状态,你会采用不同的方式吗?在应用转换之前,您仍然需要从上次存储状态创建状态机 - 或者在缓存或池中查找状态机。
使用事件源的唯一性能影响是从头开始重放转换以达到当前状态。现在,如果这是非常昂贵的you can use snapshots,以尽量减少必须重播的转换量。