现有关系数据库中的Cqrs和事件源

问题描述 投票:2回答:1

我们有一个用c ++和关系数据库编写的现有应用程序。应用程序需要在c#中重写,企业需要某种跟踪由谁改变的内容。 CQS似乎很适合读/写,但事件采购似乎几乎不可能,因为现有应用程序仍然需要与新应用程序一起使用。现有的c ++应用程序使用直接在数据库中写入的组件(数据视图)。为了进化,我们必须更改c ++应用程序中的所有可编辑表,以使用命令调用新应用程序的服务,这非常昂贵。

我们需要一个架构,我们可以在不破坏旧的c ++应用程序的情况下从旧架构发展而来,它们需要协同工作。

我们的想法是为事件采购准备一切但不使用它。然后创建两个应用程序写入的跟踪表。一旦块准备就绪,我们在新应用程序中激活该部分并在旧的c ++应用程序中停用它。

但实际上,在转移过程中何时才能存储在现有数据库中?在CommandHandler中?在EventHandler中?事件UserAdded可能在逻辑上仅在真正添加用户时发送。我们认为制作温度指挥官是最好的选择。

还是其他任何想法?

architecture relational-database cqrs event-sourcing
1个回答
2
投票

我认为将触发器添加到SQL数据库并为每个创建/更新/删除生成事件都会很好。然后,只需使用这些事件在新的CQRS系统中构建读取模型。

接下来,您应该考虑您想要的数据库,因为您可以使用旧数据库或新数据库。如果是旧数据库,您应该在sagas中为新的CQRS应用程序更新它。这两个应用程序都会读取旧数据库。对于新数据库,您将拥有一个读取模型或一些新的数据库,如Mongo(甚至SQL - 它取决于数据的大小和结构)。两个应用程序都将从新数据库中读取是的,您应该在旧的c ++应用程序中更改一些代码。

我们的想法是为事件采购准备一切但不使用它。然后创建两个应用程序写入的跟踪表。一旦块准备就绪,我们在新应用程序中激活该部分并在旧的c ++应用程序中停用它。

因为迁移到CQRS的计划我建议您使用第二种方式。

© www.soinside.com 2019 - 2024. All rights reserved.