我研究了一些 CQRS 示例实现(Java / .Net),它们使用事件源作为事件存储,使用简单的(否)SQL 存储作为“报告存储”。
看起来一切都很好,但我似乎在所有示例实现中都遗漏了一些东西。
在应用程序投入生产后,如何处理添加新的报表存储/屏幕?以及如何将现有(最新)数据从事件存储导入到新的报表存储?
IE:
想象一个基本的 DDD/CQRS 驱动的 CRM 应用程序。每个屏幕(实际上是视图)都有自己的结构化报告存储(一个 SQL 表)。所有这些视图都使用监听域事件(CustomerCreated / CustomerHasMoved 等)的处理程序进行更新。
CRM 的一项功能是它可以记录电话呼叫(PhoneCallLogged 事件)。由于时间限制,我们仅在 CRM 的 V1 中实现了电话记录(查看和报告谁处理了哪个电话将在 V2 中实现)
在生产运行一段时间后,我们希望对每个客户和销售代表的通话记录进行“报告”。
所以我们需要添加一些屏幕(视图)和支持的报告表(在报告存储中),并用事件存储中已经收集的数据填充它......
这就是我在查看我研究的样本时遇到的问题。他们不处理将现有(历史)数据从事件存储导入(新)报告存储。
EventRepository (DomainRepository) 的所有示例只有一个方法“GetById”和“Add”,它们不支持一次获取所有聚合根以填充新报告表。
如果没有此初始数据导入,新屏幕只会针对新发生的事件进行更新。不适用于已记录的电话(因为 PhoneCallLogged 事件没有报告侦听器)
有什么建议,推荐吗?
提前致谢,
雷姆科