首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用JOliviers的CommonDomain和EventStore获取聚合列表?

如何使用JOliviers的CommonDomain和EventStore获取聚合列表?
EN

Stack Overflow用户
提问于 2011-08-19 16:21:28
回答 4查看 1.2K关注 0票数 1

CommonDomain中的存储库只公开"GetById()“。例如,如果我的Handler需要一个客户列表,该怎么办呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-08-24 18:50:54

从表面上看,如果您需要对多个聚合执行操作,您只需在命令中提供每个聚合的ID(客户端将从查询端获取),然后从存储库获取每个聚合。

但是,查看您对另一个答案的评论,我发现您实际上指的是基于集合的验证。

这个问题已经引起了很多关于如何做到这一点的争论,而Greg Young has written an blog post on it.

一个经典的问题是‘我如何在处理我的'CreateUserCommand’时检查用户名是否还没有被使用。我认为建议的方法是假设客户端在发出命令之前已经通过询问查询端完成了这项检查。当创建用户聚合时,UserCreatedEvent将被引发并由查询端处理。在这里,insert查询将失败(因为数据库中的check或unique约束),并发出补偿命令,该命令将删除新创建的聚合,并可能向用户发送电子邮件,告诉他们用户名已被占用。

主要的一点是,您假设客户端已经完成了检查。我知道这是一种一开始很难掌握的方法--但这是最终一致性的本质。

你可能还想读一读其他类似的问题,里面包含了一些来自Udi Dahan的睿智的话。

票数 3
EN

Stack Overflow用户

发布于 2011-08-20 09:24:23

在经典的事件采购模型中,像get all customers这样的查询将由一个单独的查询处理程序执行,该处理程序监听域中的所有事件,并构建一个查询模型来满足相关问题。

例如,如果您需要按姓氏查询客户,那么您可以监听所有客户创建和客户名称更改事件,并只更新一个从姓氏到客户id对的表。您可以保存与显示数据的UI相关的其他信息,也可以简单地保存ID并转到相关客户的存储库,以便与他们进一步合作。

票数 1
EN

Stack Overflow用户

发布于 2011-08-19 16:31:13

您不需要在处理程序中包含客户列表。每个聚合必须在其自己的事务中进行处理。如果您想向用户显示此列表,只需构建适当视图。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7118798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档