我正在尝试使用事件源/ CQRS重写基于CRUD的库存系统。
我遇到的问题是如何处理库存盘点。这个想法是商店偶尔会想要计算他们的库存并确定是否有任何减少(我们认为已售出但仍在库存中的物品,或者我们认为已在库存中但无法位于商店中的物品)。
在CRUD系统中,当有人开始计数时,系统会在称为“期望”的表中创建所有可用库存的列表,并且在扫描每个库存项目时,基本上将其标记在期望列表之外。缩小是因为期望列表中未扫描的所有内容或期望列表中未扫描的所有内容。
问题是我无法理解如何在ES中表示这一点。如果我唯一的实体是“库存”,我如何确定何时开始或完成计数?
即使我能看到的任何ES / CQRS库存系统示例也会有所帮助
任何帮助都将不胜感激。
答案 0 :(得分:1)
在CRUD系统中,当某人启动时...
“开始”一词在这里是一个很大的暗示-它表示一个过程,该过程将具有自己的簿记功能。
要注意的另一件事是-除了域模型关于“应该”显示哪些库存的想法外-几乎所有数据都来自真实世界。某些人可以决定何时开始审核,何时结束审核,计入哪些库存。
在源于事件的世界中,您应该期望此过程具有自己的事件流-在开始时会发生一连串事件,以注册您需要考虑的清单物料,然后再分配其他事件作为处理事件的方式。库存变得清晰。
请注意,数据是库存的副本;就像当前流程将您想要的内容复制到新表中一样。当出现诸如自治之类的问题时,这真的很重要。
(这也可能是一个摘要-库存表中的某些字段在执行期望审核时没有被重视。)
所以您说的是,具有不代表真实“事物”的聚合根是可以的
是的,尽管更有用的想法是业务流程实例是真实的东西。
如果愿意,可以将跟踪工作完成情况的日志/日志/文档视为“事情”。