【问题标题】:EventStore without CQRS没有 CQRS 的 EventStore
【发布时间】:2013-03-27 09:04:05
【问题描述】:

我看过很多关于 EventStores 的文章,但所有文章都伴随着关于 CQRS 的讨论。

我们希望使用 EventStore 来集成有界上下文,但希望坚持使用传统的 ORM 来读取/写入聚合,以避免命令/查询和单独的读取模型在我们的例子中会增加太多的复杂性。

鉴于将这两个概念一起讨论如此流行,人们会认为它们注定要一起生活 - 与为聚合/CQRS/读取实现 EventStore 相比,在没有 CQRS 的情况下执行 EventStore 'lite' 是否存在缺陷-模型也是?

【问题讨论】:

  • 为了使用事件存储方法,您需要有一个系统,其中所有 数据更改 操作都由命令引起并导致事件(您然后可以存储和重播)。这在 CQRS 环境中非常适合——但我看不出有什么理由你不能自己创建这样的系统——它只需要纪律来通过命令处理所有数据更改并触发事件来报告什么是发生了。

标签: domain-driven-design neventstore


【解决方案1】:

跑到NoSql Distilled - 几天不做任何事情,但阅读它并画出你所追求的东西,你会节省很多时间。如果您正在“读/写聚合”,则应该考虑使用 RavenDB 等数据库。

请注意,事件存储标签是针对 JOliver 事件存储的,它具有关键的架构概念

您在制作事件方面也有些落后,您的域以特定方式构建以促进这一点。与您在问题中提出问题的方式形成鲜明对比的关键内容(解释得很糟糕和/或不公平:我想使用事件存储来存储事件 - 我可以自己做剩下的事情)

  1. 事件按聚合进行批处理 - 其真正的事件管理单元

  2. 派发给某物。

如果您不想要事件源域模型,请研究队列管理解决方案。这是一件非常合法的事情——只是不要假装 Event Store 是一个通用的事件发布子队列。

将 Dispatcher Project 用于构建读取模型的非规范化程序很简单 - 您可以使用各种奇特的东西,但使用 SQL SB 等熟悉的工具和 PetaPoco 等简单的数据库层就可以了。

你真的用过 CommonDomain 和 EventStore 吗?您是否阅读过 nuget 中的自述文档?您看过 2 JOliver 视频吗?

【讨论】:

  • Ruben 感谢您的宝贵回复,我找到了一个视频vimeo.com/31153808 能否请您将我链接到其他视频(您提到有 2 个)-找不到另一个!
  • @g18c 已编辑。IIRC 你找到的是最好的单曲,但其他的都值得一看
  • 感谢这些链接 - 是的,视频很棒,真的帮助了我的理解。由于 joliver 以如此有条理的方式编写代码,因此实现命令和处理程序不会有太多开销,因为它可能会为我节省很多 ORM 映射的时间。我完成了一个快速演示(有一个小问题)stackoverflow.com/questions/15723640/…,但到目前为止,这个库给我留下了深刻的印象
【解决方案2】:

我们想使用 EventStores 来集成有界上下文

可以将事件存储用作消息队列,另外还有一个好处是它是持久的,新订阅者可以请求所有过去的事件。

但想坚持使用传统的 ORM 来读取/写入聚合, 避免命令/查询和单独的读取模型,在我们的例子中 会增加太多的复杂性。

顺便说一句,您仍然可以获得 CQRS 的一些好处,只需使用单独的 read-model 进行查询而不是您的行为模型。

总的来说,您可以在不使用event sourcing 的情况下使用 EventStore,但是您应该确保它支持您的集成方案的所有要求。除了事件存储之外,您可能还需要其他组件。更一般地说,事件存储可用于存储任何时间序列数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    • 2013-07-16
    • 1970-01-01
    相关资源
    最近更新 更多