【问题标题】:Denormalizing / projecting data in CQRSCQRS 中的非规范化/投影数据
【发布时间】:2014-06-27 18:08:56
【问题描述】:

我正在研究 CQRS(以及一般的 DDD),但我不确定如何实现它的特定部分。

我了解分离命令和查询的好处;假设我也在使用事件溯源,并且我有一个很好的每个实体的历史列表。

据我了解,用于构建视图的数据存储可以是任何形式,为了提高性能,将其非规范化是完全可以接受的。

我的问题是如何实现从我的规范化/以事件为中心的写入数据库到我的视图就绪/非规范化表的转换/投影?

我是否使用我的领域模型中的事件来实现这一点,并由应用程序的另一部分监听?我是否使用 SQL 视图(这在使用 RDBMS/NoSQL 组合时不起作用)。

如何在不使用各种不必要的 getter 污染域模型的情况下做到这一点?

谢谢

【问题讨论】:

    标签: php domain-driven-design cqrs


    【解决方案1】:

    您在使用您的域事件来管理读取预测方面走在了正确的轨道上。您的聚合不需要公开它们的内部状态,因为它们广播的域事件将包含所有必要的信息来更新您的视图投影。然后可以以任何形式存储视图投影数据。

    有关实现细节,请查看Greg Youngs CQRS example,尤其是domain implementationread model implementation

    【讨论】:

    • 谢谢,这很有帮助。似乎有很多 View 对象订阅域事件并知道如何更新它们的存储。令人担忧的是,如果您在没有 ES 的情况下执行此操作,则您正在从事件历史记录中构建视图数据,一旦保存原始实体就会丢失 - 使得重建变得困难。
    • 是的,如果没有 ES,您可能需要公开更多聚合的内部结构,或者您可以使用域事件作为更改的一般指示并直接查询聚合的数据源。
    猜你喜欢
    • 1970-01-01
    • 2013-12-11
    • 2017-01-14
    • 2016-05-27
    • 2016-07-23
    • 1970-01-01
    • 2012-11-18
    • 2010-10-06
    • 1970-01-01
    相关资源
    最近更新 更多