Import 在CQRS事件源系统中导入电子表格

Import 在CQRS事件源系统中导入电子表格,import,cqrs,event-sourcing,Import,Cqrs,Event Sourcing,我有一个使用CQRS+ES的系统。我需要从电子表格中导入聚合,我想知道是否有人对最好的方法有任何想法 我最初的想法是浏览电子表格,创建X数量的“CreateNewAggregateCommand”类型命令。然后,我可以运行这些命令,它们的作用就像用户使用UI创建了单个命令一样。这似乎是正确的还是有更好的方法 如果电子表格中的一行无法导入,则需要拒绝整个文件,这一点很重要,那该怎么办。在最终一致的系统中,如果导入中的一行失败,您将如何处理一致性?您会发出某种补偿命令吗?在事件源系统中,导入或批量更

我有一个使用CQRS+ES的系统。我需要从电子表格中导入聚合,我想知道是否有人对最好的方法有任何想法

我最初的想法是浏览电子表格,创建X数量的“CreateNewAggregateCommand”类型命令。然后,我可以运行这些命令,它们的作用就像用户使用UI创建了单个命令一样。这似乎是正确的还是有更好的方法


如果电子表格中的一行无法导入,则需要拒绝整个文件,这一点很重要,那该怎么办。在最终一致的系统中,如果导入中的一行失败,您将如何处理一致性?您会发出某种补偿命令吗?

在事件源系统中,导入或批量更新操作通常作为特殊命令处理程序实现,并引发特殊事件,如ImportFromSpreadsheet/ImportFromSpreadsheet。这样可以更容易地跟踪行为,因此您清楚地知道这一行是导入的,而不是手动创建的。如果还将命令保存在事件存储中以进行审核,则可以使用常规事件


根据行导入失败,在给定条件下,我将避免大量导入行,并期望在中间某个地方出现错误。如果您预先验证完整的电子表格,以确保它将导入,这将更加容易。我知道这可能很难,但您可以在命令中有一个字段,指示您正在进行验证,这样它就不会引发任何事件,这样您就可以保持验证和实际导入的逻辑相同。

我们在这里需要务实,如果您需要导入数千个条目,您将不会逐个进行导入。以下是您应该使用已知模式执行的操作

将文件推送到服务器,将其上载到FTP位置或类似位置,然后创建一个简单的命令来启动导入过程。使用GUID作为文件名,然后在命令中添加该文件名,处理程序应验证该文件是否存在并开始处理该文件

希望这有帮助