我正在使用我自己的 CQRS 模式实现将一个旧项目迁移到 CQRS。我开始此迁移的主要原因是摆脱 n 层架构造成的困惑。然而,与许多其他项目一样,该项目正在使用关系数据存储。
此过程中的当前状态是我有进行更改的命令和隔离查询的查询对象。这意味着从客户端到服务器,我有一个 CQRS-ish 方式来更改和查询数据,尽管我没有发布任何来自更改的事件,也没有非规范化的读取存储。我应该提一下,我也有非常贫血的 DTO 作为我的“领域模型”。所有行为都分布在 n 层及其处理程序、管理器和所有那些可怕的层中。
我想知道如何进行下一步。我现在想要的是开始构建一个负责其行为的领域模型,原因是我想开始使用事件存储作为事实来源,这让我想到了我的问题:
如何将数据从关系数据存储迁移到事件存储?
我有一个非常规范化的数据模型,其中包含非常重要的数据,必须进行迁移。我明白我不能指望从这些数据中捕捉到任何意图,因为它已经死了,但我应该如何处理它?我应该创建大量迁移命令吗?很高兴听到您的经验。
最佳答案
我还没有机会尝试这个,但我想尝试的东西会在多个阶段起作用:
- 首先列出系统需要的所有事件。
- 接下来将 View 引入关系数据库以表示事件。
- 编写自定义实用程序以从 View 中进行选择以构建正确的事件对象。
- 让自定义实用程序以正确的顺序将事件对象写入事件存储。
- 最后确保从事件存储中刷新非规范化 View 模型。
我认为将事件写入事件存储的顺序有点棘手,需要多加思考。但是鉴于这是一个迁移过程,所以只要域的最终状态是正确的,我认为这并不重要。如果您的关系表有时间戳,那么这可能会有所帮助。
我决定构建事件对象比创建命令更合适,因为关系数据代表过去发生的操作的域。
关于cqrs - 将关系数据迁移到事件存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6514492/