如何使用J Oliver的EventStore库?

问题描述 投票:2回答:1

我一直在寻找使用J Oliver的EventStore和mongo作为持久层的新项目的事件采购,但是遇到了一些问题:

  1. 在尝试事件采购之前,我的域名持久存储到数据库,我一直在使用Udi的域事件pattern,这对我来说非常有效,NHibernate负责管理工作单元。但是我最终得到了一个可以影响多个聚合的工作单元,例如。 我“结帐”我的购物篮聚合,它会引发一个事件,处理程序通过创建发票聚合来响应,这反过来又会引发一个事件(这只是一个例子) 在这种情况下,我有一个工作单元改变了两个聚合根 - 在事件存储中我可以将引发的事件添加到两个不同的事件流中,但它们不会以原子方式持久化(第一个可能成功,第二个失败) 。那么人们做些什么来避免发生这种情况呢?
  2. 在github主页上,它建议您可以使用流畅的界面来配置EventStore,但是当我下载源代码时,编译它并查看示例中的连接类似乎不可用 - 它是否在不同的分支中? (我有主人)
  3. 处理IStoreEvents impl的推荐方法是什么?作为一个类似于Nhibernates会议工厂的单身人士?
cqrs
1个回答
5
投票
  1. 实际上,您给出的示例中有多个工作单元。修改聚合时,它会调度一个事件。其他东西听取该事件并处理另一个工作单元等等。 EventStore的设计方式,它仍然可以适应您的场景,但它将是三个独立的工作单元。您只需将Udi的DomainEvents“Salvation”解决方案插入到您自己的IPublishEvents实现中,然后在AsynchronousCommitDispatcher中运行。在真正的DDD中,单个聚合是一个工作单元 - 根据定义,这是一致性边界。
  2. 大约8个小时前,我做了一个推送,有一些流畅的东西作为编译的一部分。尝试从主人那里下来最新的。
  3. IStoreEvents设计为多线程,因此您可以安全地将其配置为应用程序中的单例。从IStoreEvents打开会话时,会话是单线程的,不应在应用程序中的线程之间共享。
© www.soinside.com 2019 - 2024. All rights reserved.