【问题标题】:Sharing MetaData across bounded contexts in Domain-Driven Design (DDD)?在域驱动设计 (DDD) 中跨边界上下文共享元数据?
【发布时间】:2015-05-20 22:14:37
【问题描述】:

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

订阅 BC 具有业务规则形式的警报类型元数据,用于确定订阅者可以订阅的警报类型。一旦订阅者订阅了警报类型,另一个系统就会开始将这些警报发布到 Alerts BC 并持续存在。在发布时,Alerts BC 知道警报类型 ID,但不知道警报名称和描述等元数据。没关系,因为在发布时需要存储的只是带有警报类型 ID 的警报。

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

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

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

是否有任何 DDD 专家对解决此问题有任何建议?任何投入将不胜感激。

【问题讨论】:

  • 您可以通过 Web 服务层使用上下文间操作。
  • 所以应用程序正在使用多个 Web 服务,但是在我们的例子中 Web 服务是 BC 定义的一部分。所以我不确定这是否不是满足我们需求的好方法。但这也带来了另一个话题,如果 BC 包括应用程序和 Web 服务,或者应用程序和它的 Web 服务作为一个整体是否可以使用多个有界上下文?那时,元数据可以在共享内核中表示,然后缓存。如果需要,我们可以在两个 BC 中引用它。

标签: domain-driven-design


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-01-18
    • 2016-09-26
    • 1970-01-01
    • 2021-01-29
    • 2016-01-02
    • 2015-01-06
    • 2015-05-02
    • 2020-10-26
    • 1970-01-01
    相关资源
    最近更新 更多