事件溯源的库存盘点

Inventory Counts with Event Sourcing

我正在尝试使用事件 sourcing/CQRS 重写基于 CRUD 的库存系统。

我遇到的问题是如何处理库存盘点。这个想法是商店偶尔会想要清点他们的库存并确定是否有任何减少(我们认为已售出但仍在库存中的物品,或者我们认为在库存中但无法在商店中找到的物品)。

在 CRUD 系统中,当有人开始计数时,系统会在名为 "expectations" 的 table 中创建所有可用库存的列表,并且在扫描每个库存项目时,它基本上会标记该项目从期望列表中删除。缩小的区别在于预期列表中未扫描的任何内容,或未在预期列表中扫描的任何内容。

问题是我无法理解如何在 ES 中表示它。如果我的唯一实体是 "inventory",我如何确定计数何时开始或完成?

即使我能看到的 ES/CQRS 库存系统的任何示例都会有所帮助

非常感谢任何帮助。

In the CRUD system when someone starts...

"start" 这个词在这里是一个很大的暗示 - 它暗示了一个 进程 将有自己的记账工作。

另一件需要注意的事情是——除了域模型关于存在什么库存的想法 "should"——几乎所有数据都来自现实世界。一些人决定审计何时开始,审计何时结束,哪些库存要入账。

在事件源世界中,您应该期望此过程有自己的事件流 - 开始时会出现一系列事件,以注册您需要考虑哪些库存,然后是其他事件作为处置库存变得清晰。

注意数据是库存的副本;就像当前进程将您想要的内容复制到新的 table 中以进行处理一样。当出现自治等问题时,这一点变得非常重要。

(它也可能是一个摘要——库存 table 中可能有您在执行期望审计时不重视的字段。)

So you are saying it is OK to have aggregateroots that do not represent a real "thing"

是的,尽管更有用的想法是业务流程的实例是真实的。

如果您愿意,可以将跟踪正在完成的工作的 journal/log/document 想象成 "thing"。