Architecture 从另一个有界上下文检索CQRS命令端的数据

Architecture 从另一个有界上下文检索CQRS命令端的数据,architecture,cqrs,Architecture,Cqrs,我第一次尝试实现CQRS,但遇到了一个问题,即我从外部系统接收数据,该系统有一个字段是字符串引用,例如用户名。我需要获取引用所涉及的ID,如果找不到该ID,则拒绝 ID来自一个单独的有界上下文,加载整个记录来获取ID似乎效率低下。我想知道是否有一种符合CQRS模式的方法,只返回一个基于命令端的名称/引用的ID,因为这看起来更像是一个查询问题(但也许我有点天真?)我认为这不会有任何疑问。CQRS中的查询端主要用于读取客户端,但这并不意味着您完全不能在命令端内部进行查询。接收请求、查询某些数据(如事

我第一次尝试实现CQRS,但遇到了一个问题,即我从外部系统接收数据,该系统有一个字段是字符串引用,例如用户名。我需要获取引用所涉及的ID,如果找不到该ID,则拒绝


ID来自一个单独的有界上下文,加载整个记录来获取ID似乎效率低下。我想知道是否有一种符合CQRS模式的方法,只返回一个基于命令端的名称/引用的ID,因为这看起来更像是一个查询问题(但也许我有点天真?)我认为这不会有任何疑问。CQRS中的查询端主要用于读取客户端,但这并不意味着您完全不能在命令端内部进行查询。接收请求、查询某些数据(如事件存储/消息队列中的事件或任何其他类型的数据)并根据这些数据采取某些操作(如是否引发事件)是完全可以的。事实上,事件源的整个思想依赖于查询旧事件和重新水化聚合的当前状态


另一种代替查询的方法是,您可以订阅由另一个有界上下文引发的事件,特别是订阅包含引用ID的事件,并在第一个服务中维护所有ID用户名对的列表。

因此,我可以在命令堆栈上为例如,GetIdByReference?我认为重要的一点是,由命令管理的聚合中的数据是原子事务单元的一部分。您在该聚合之外依赖的任何数据在版本控制方面都可能不一致(可能过时)。只要没有问题,我熟悉的方法就是向命令处理程序中注入一个单独的服务,以提供对必要数据的访问,否则需要将数据作为所提供命令的一部分,并将其拉入应用程序层。@StevenBrookes:可以。RealStk方法可以工作,但是一旦您的决策逻辑开始变得复杂,或者它开始依赖于多个服务,那么您可以考虑使用像SaaS/进程管理器这样的模式。这个问题让我想起了我开始学习和尝试应用DDD时遇到的两个有点相关的问题。