2011-03-22 49 views
2

我一直在寻找到事件采购用于为J奥利弗的EventStore一个新的项目和蒙戈作为持久层,但所遇到的几个问题:如何使用J Oliver的EventStore库?

  1. 此之前试图事件采购我的域名保存到一个数据库并且我一直在使用Udi的域名事件pattern,这对NHibernate管理工作单元非常有用。然而,我已经结束了一个工作单元,可以影响多个聚合,例如。

    我这增加了它的处理程序创建的发票合计而这又引发一个事件响应的事件“结账”我的购物篮总(这仅是一个例子)

    在这种情况下,我有一个单元改变两个聚合根的工作 - 在事件存储中,我可以将引发的事件添加到两个不同的事件流中,但它们不会以原子方式持续(第一个可能成功,第二个失败)。那么人们为了避免这种情况做了什么?

  2. 在github主页上,它建议您可以使用流畅的接口来配置EventStore,但是当我下载源代码时,编译它并查看示例中的连接类似乎不可用 - 是它在不同的分支? (我有主人)

  3. 什么是推荐的方式来处理IStoreEvents impl?作为一个类似于Nhibernates会话工厂的单身人士?

+2

在Stackoverflow上,每个帖子询问一个问题是一个很好的做法。你最终会得到更好的答案,因为发布一个问题的答案比较容易,容易找到好答案,更容易找到这个帖子,因为你可以给它一个更具描述性的标题等等。无论如何,好问题! – 2011-06-16 18:47:44

回答

5
  1. 你实际上已经得到了在你给的例子出现多个工作单元。当一个聚合被修改时,它调度一个事件。别的东西听这个事件并处理另一个工作单位等等。

    EventStore的设计方式,它仍然可以适应您的情况,但它可能是三个单独的工作单元。您只需将Udi的DomainEvents“Salvation”解决方案插入到您自己的IPublishEvents实现中,并在AsynchronousCommitDispatcher内部运行即可。在真正的DDD中,单个聚合是一个工作单元 - 根据定义,这是一致性边界。

  2. 大约8小时前我做了一个流畅的东西,作为编译的一部分。尝试从主人处取下最新的内容。

  3. IStoreEvents被设计成多线程的,因此您可以安全地将它配置为应用程序中的单例。当您从IStoreEvents打开会话时,会话是单线程的,不应该在应用程序中的线程之间共享。