当有人说在期刊中存储事件本身而不是状态/数据时,这意味着什么?这样人们就可以重播事件来建立国家。有人可以解释日记中的数据是如何看起来的,因为没有状态存储?是否存储了函数本身?
答案 0 :(得分:1)
这意味着您只保留状态中已更改的内容而不是所有状态。我会给你和榜样。
假设您有InventoryAggregate
存储项目,例如Products
。在内部,此Aggregate
存储所有项目的列表,但是当添加项目X的命令到达(AddItemXCommand
)时,它会生成项目x已添加的事件(ItemXWasAddedEvent
)。下次类似的命令到达时,Aggregate Repository
从Event Store
(来自 Journal ,如果需要)加载所有先前生成的事件并逐个应用到state
上聚合以构建状态(在此特定示例中,构建所有添加项的列表)。
因此,在命令到达并执行后,Aggregate
更改(项目已添加到列表中)但您不会保留它(您不保留项目列表),您只保留生成的事件(添加了一个项目)。保留该事件后,您可以放弃state
及其内部Snapshot
。
作为优化,您可以保留内部状态,因此当命令到达时,您不必加载+应用所有事件,只需缓存状态后生成的事件。特定时刻的这种状态称为_dl_runtime_resolve
。