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

时间:2015-04-16 14:10:09

标签: import cqrs event-sourcing

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

我们需要在这里务实,如果你需要导入数千个条目,你将不会一个接一个地进行。您应该使用已知模式Claim Check

进行操作

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

希望这有帮助。