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

时间:2017-12-18 16:15:23

标签: architecture relational-database cqrs event-sourcing

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

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

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

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

还是其他任何想法?

1 个答案:

答案 0 :(得分:2)

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

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

  

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

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