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



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

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

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

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

根据行导入

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

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

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

希望这有帮助。

最新更新