【问题标题】:Splitting an aggregate across bounded contexts跨有界上下文拆分聚合
【发布时间】:2019-11-18 16:58:46
【问题描述】:

我有一个类似于here描述的例子:

一个实体的身份可以跨越多个微服务或有界 上下文。

相同的身份(即相同的 Id 值,虽然可能不是 同一个域实体)可以跨多个有界建模 上下文或微服务。但是,这并不意味着相同 具有相同属性和逻辑的实体将在 多个限界上下文。相反,每个限界上下文中的实体 将他们的属性和行为限制在 Bounded 上下文的域。

例如,买方实体可能拥有一个人的大部分 在配置文件的用户实体中定义的属性或 身份微服务,包括身份。但买方实体在 订购微服务可能具有较少的属性,因为只有 某些买家数据与订单流程有关。的上下文 每个微服务或限界上下文都会影响其领域模型。

在我的例子中,我有一个 Subscription 模型,它有两个不同的有界上下文,它们有自己的属性。

更进一步,一个Subscription 属于一个Agency,而一个Agency 只能有一个(不是0,也不是很多)Subscriptions

因此,基于此,我一直在考虑聚合 id 将是什么。由于SubscriptionAgency 具有1-1 映射关系,因此可以使用与Agency 相同的ID 吗?

我认为这是有道理的,因为 Subscription 不需要它自己的 ID。就算有我也不认为会返回给用户,用户可以通过拥有Agency id来引用它。

在这种有界上下文中,Agency 聚合(或其属性)不相关,因此我认为它们不是同一聚合的一部分。

综上所述,如果是1-1映射,一个聚合是否可以共享另一个聚合的ID?

【问题讨论】:

  • 澄清问题。如果Subscription 只能通过拥有Agency 来引用,它是否应该被视为AggregateAgencyBounded ContextsSubscription 中的一个概念吗?当 Agency 被归档/删除时,Subscription 会发生什么情况?您是使用 RDBMS 进行持久化还是使用文档存储?使用不同的主ID并通过agency_id属性链接到Agency的机制是一个选项吗?

标签: domain-driven-design microservices


【解决方案1】:

我不认为实际的实现 w.r.t. Id 真的很重要。共享标识符应该很好。

这与在 BC 之间“拆分聚合”有些不同,这是您最肯定想要做的事情 :)

一个 BC 中的聚合将由 id 或另一个 BC 中的值对象表示。只有一个 BC 应该是任何聚合的记录系统

【讨论】:

    猜你喜欢
    • 2014-08-22
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    • 2019-04-10
    • 1970-01-01
    • 2018-07-12
    相关资源
    最近更新 更多