- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个关于使用 JOliver's Event Store 在单个事务中更新多个聚合的问题.据我了解,每个聚合都应该有自己的事件流。现在,虽然许多命令处理程序只会加载一个聚合并只更新该聚合(即保存这些聚合的事件),但我可以想象会有需要更新多个聚合的命令处理程序。当然,我想以交易的方式做到这一点。
但是,我不知道如何使用 Event Store 做到这一点。存储事件是通过调用 CommitChanges()
来完成的。在事件流上。如果我们有多个聚合要更新,将有多个事件流,从而多次调用 CommitChanges()
.使该事务性的唯一方法是将其包装在 TransactionScope
中。 ,但这没有多大意义,因为底层存储技术可能不支持事务。所以我最终得到了这段代码,这绝对不是我要找的:
Guid aggregateGuid1 = Guid.NewGuid();
Guid aggregateGuid2 = Guid.NewGuid();
Guid commitGuid = Guid.NewGuid();
var stream = store.OpenStream(aggregateGuid1, 0, int.MaxValue);
stream.Add(new EventMessage() { Body = new MonitorDisabled { MonitorGuid = aggregateGuid1, User = "A" } });
stream.CommitChanges(commitGuid);
stream = store.OpenStream(aggregateGuid2, 0, int.MaxValue);
stream.Add(new EventMessage() { Body = new MonitorEnabled { MonitorGuid = aggregateGuid2, User = "B" } });
// Can't commit twice with the same commit id, what if fails after first one? No way for the store to know it had to write the second part of the commit.
stream.CommitChanges(commitGuid);
最佳答案
聚合定义了事务边界。
如果您需要执行跨聚合交易,您应该检查聚合并可能重新设计它们。
如果操作(命令)影响多个聚合,并且您确定聚合设计良好并映射到域中的真实一致性边界,eventual consitency可能是你正在寻找的。只需向每个聚合发送一个命令,并有两个事务,每个事务一个。如果您认为最终的一致性不适合您的情况,那么恐怕它又回到了绘图板上。
关于transactions - 使用 JOliver EventStore 更新多个聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8143194/
如何访问 EventStore 中存储的所有事件以重建我的读取模型? 在问题 J Oliver EventStore V2.0 questions 中提到了一个名为 GetFrom 的方法,但我在 W
我试图弄清楚我的事件存储和我的读取模型在实际具体实现方面是如何相关的。 我对事件存储的有限了解使我相信: 事件提交给事件存储 调度员运行 如果我使用队列,我会将消息发送到队列(比方说公共(public
我有一个关于使用 JOliver's Event Store 在单个事务中更新多个聚合的问题.据我了解,每个聚合都应该有自己的事件流。现在,虽然许多命令处理程序只会加载一个聚合并只更新该聚合(即保存这
我正在寻找使用 JOlivers CommonDomain 和 EventStore 测试域的好例子 我一直在观看 greg youngs 的视频,他有一个非常简单的抽象聚合根测试装置。 是否有类似的
我正在评估 JOliver's EventStore图书馆。特别是,我正在尝试使用 RavenDB作为 EventStore 的持久化引擎。 EventStore 附带了一个插件。注意:数据库是空的,
我是一名优秀的程序员,十分优秀!