【发布时间】:2013-12-05 05:21:13
【问题描述】:
什么是聚合以及它们如何在 CQRS(命令-查询-职责-隔离)和 ES(事件溯源)中使用?我是这种架构的新手,如果有人可以向我解释这一点,我会非常高兴。谢谢!
【问题讨论】:
-
稍微搜索一下 CQRS 和 Event Sourcing 即可回答您的问题
标签: domain-driven-design cqrs aggregateroot
什么是聚合以及它们如何在 CQRS(命令-查询-职责-隔离)和 ES(事件溯源)中使用?我是这种架构的新手,如果有人可以向我解释这一点,我会非常高兴。谢谢!
【问题讨论】:
标签: domain-driven-design cqrs aggregateroot
首先我想引用Martin Fowler's blog post on CQRS 并注意聚合与领域驱动设计相关,然后与 CQRS 相关。
CQRS 自然适合其他一些架构模式。
- 当我们远离通过 CRUD 与之交互的单一表示时, 我们可以轻松迁移到基于任务的 UI。
- 与命令模型的交互自然落入命令或事件中, 与Event Sourcing 非常吻合。
- 拥有单独的模型会引发关于保留这些模型有多难的问题 一致,这提高了使用 eventual consistency 的可能性。
- 对于许多域,更新时需要很多逻辑, 所以使用EagerReadDerivation 来简化可能是有意义的 您的查询端模型。
- CQRS 适用于复杂领域,这种领域也受益于 Domain-Driven Design。
就领域驱动设计而言,聚合是实体和值对象的逻辑组,它们被视为一个单元 (OOP, Composition)。聚合根是所有其他实体都绑定到的单一实体。
【讨论】: