Domain driven design 在域驱动设计(DDD)中跨有界上下文共享元数据?

Domain driven design 在域驱动设计(DDD)中跨有界上下文共享元数据?,domain-driven-design,Domain Driven Design,我有一个奇怪的DDD问题要解决。我有两个有界上下文(BC),一个用于订阅,一个用于警报 订阅BC具有警报类型元数据,以业务规则的形式表示订阅者可以订阅的警报类型。订阅者订阅警报类型后,另一个系统开始将这些警报发布到警报BC并保持。发布警报时,BC知道警报类型id,但不知道其元数据,如警报名称和说明。这没关系,因为发布时需要存储的只是带有警报类型Id的警报 然而,这就是我开始崩溃的地方。需要获取用户发布的警报,作为查询的一部分,它将包括来自订阅服务器BC的警报类型元数据。由于BC通常应该是原子的,

我有一个奇怪的DDD问题要解决。我有两个有界上下文(BC),一个用于订阅,一个用于警报

订阅BC具有警报类型元数据,以业务规则的形式表示订阅者可以订阅的警报类型。订阅者订阅警报类型后,另一个系统开始将这些警报发布到警报BC并保持。发布警报时,BC知道警报类型id,但不知道其元数据,如警报名称和说明。这没关系,因为发布时需要存储的只是带有警报类型Id的警报

然而,这就是我开始崩溃的地方。需要获取用户发布的警报,作为查询的一部分,它将包括来自订阅服务器BC的警报类型元数据。由于BC通常应该是原子的,这开始偏离BC的意图

这确实是因为,现在我通常认为,如果我需要使用警报类型数据获取用户警报,那么我应该在发布时将该警报类型数据的副本保留在我的警报BC中。但是我受到限制,因为调用方只想在发布时发送AlertTypeId,而不想发送额外的元数据

由于许多原因,跨BCs查询是一个可怕的想法。我可以考虑使用一个域事件解决方案,比如带有事件监听器的ESB,但我觉得这对元数据来说太过分了。还想提到的是,元数据不会经常更改,因此可能会被缓存


有没有DDD专家对解决这个问题有什么建议?如有任何意见,将不胜感激

决定对元数据采用缓存方法。缓存管理器将负责过期和重新水合。

您可以通过web服务层使用上下文间操作。因此,应用程序使用多个web服务,但在我们的示例中,web服务是BC定义的一部分。因此,我不确定这是否是一个适合我们需要的好办法。但这也带来了另一个话题:BC应该包括应用程序和web服务,还是应用程序及其web服务作为一个整体可以使用多个有界上下文?此时,元数据可以在共享内核中表示,然后缓存。如果需要,我们可以在两个BC中引用它。