Architecture 现有关系数据库上的CQR和事件源 我们有一个C++和关系数据库的应用程序。应用程序需要用c#重写,业务部门需要某种跟踪何时由谁更改了什么。CQS在读/写方面似乎很好,但事件来源似乎几乎不可能,因为现有应用程序仍需要与新应用程序一起使用。现有的C++应用程序使用直接在数据库中写入的组件(数据视图)。 为了发展,我们必须改变C++应用程序中所有可编辑的表,用命令调用新的应用程序,这是非常昂贵的。 我们需要一个架构,我们可以从旧的新的进化而不破坏旧的C++应用程序,它们需要一起工作。

Architecture 现有关系数据库上的CQR和事件源 我们有一个C++和关系数据库的应用程序。应用程序需要用c#重写,业务部门需要某种跟踪何时由谁更改了什么。CQS在读/写方面似乎很好,但事件来源似乎几乎不可能,因为现有应用程序仍需要与新应用程序一起使用。现有的C++应用程序使用直接在数据库中写入的组件(数据视图)。 为了发展,我们必须改变C++应用程序中所有可编辑的表,用命令调用新的应用程序,这是非常昂贵的。 我们需要一个架构,我们可以从旧的新的进化而不破坏旧的C++应用程序,它们需要一起工作。,architecture,relational-database,cqrs,event-sourcing,Architecture,Relational Database,Cqrs,Event Sourcing,我们有一个想法,就是为活动资源准备一切,而不是使用它。然后创建两个应用程序都写入的跟踪表。一旦一个块准备好,我们激活新的应用程序中的那个部分,并在旧的C++应用程序中禁用它。 但实际上,在传输过程中,存储在现有数据库中的最佳时机是什么时候?在命令处理程序中?在EventHandler中?UserAdded事件在逻辑上只能在用户真正添加时发送。我们认为制作临时指挥官是最好的选择 或者其他想法?我认为最好向SQL数据库中添加触发器,并为每次创建/更新/删除生成事件。 然后使用这些事件在新的CQRS系

我们有一个想法,就是为活动资源准备一切,而不是使用它。然后创建两个应用程序都写入的跟踪表。一旦一个块准备好,我们激活新的应用程序中的那个部分,并在旧的C++应用程序中禁用它。 但实际上,在传输过程中,存储在现有数据库中的最佳时机是什么时候?在命令处理程序中?在EventHandler中?UserAdded事件在逻辑上只能在用户真正添加时发送。我们认为制作临时指挥官是最好的选择


或者其他想法?

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

接下来,您应该考虑您想要什么样的数据库,因为您可以使用旧数据库或新数据库。 在旧数据库的情况下,您应该在sagas中为新的CQRS应用程序更新它。这两个应用程序都将从旧数据库读取数据。 在使用新数据库的情况下,您可能会有一个读取模型或一些新数据库,如Mongo(甚至SQL,这取决于数据的大小和结构)。这两个应用程序都将从新数据库读取数据。是的,你应该改变旧的C++应用程序中的一些代码。 我们有一个想法,就是为活动资源准备一切,而不是使用它。然后创建两个应用程序都写入的跟踪表。一旦一个块准备好,我们激活新的应用程序中的那个部分,并在旧的C++应用程序中禁用它。

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

你是否需要知道谁和什么对遗留的C++应用程序做了?是的,这是GDPR的要求,但是对于遗产,他们说他们不那么严格。我们不想冒任何风险,希望找到一个对双方都有效的解决方案。在上一次会议上出现的一个新想法是使用事件在纯SQL Server上进行所有跟踪。问题是旧的C++应用程序使用的是表中的SQL用户,而不是应用程序中的认证用户。你有一个数据库吗?你使用事务吗?是的,一个MS SQL数据库,C++应用程序有时使用事务。