DDD,微服务和数据方向

时间:2016-06-27 08:39:06

标签: domain-driven-design microservices

让我们假设我有身份管理有限的上下文和讨论有界的上下文。每个都是一个单独的微服务。

身份有用户,讨论有版主。

如果我在身份界限上下文中更新名字和姓氏,我的计划是向Amazon SQS发布消息,并讨论有限上下文以侦听该队列的任何更改,并通过讨论上下文更新名字和姓氏反腐败层。

我的问题是,如果我决定在讨论BC中更改名字和姓氏怎么办?我的身份BS是否应该听取这些更改,或者双向通信不被认为是一种好的做法,我应该始终在Identity BC内部更新这些信息?

2 个答案:

答案 0 :(得分:2)

人们如何更改姓名?

我会尝试在允许的地方有一个地方,并让该上下文拥有数据。然后,其他上下文可以订阅更改并采取相应的行动。

答案 1 :(得分:2)

  

我的身份BS是否应该听取这些更改,或者双向通信不被认为是一种好的做法

我认为双向沟通不一定是这里的问题。我担心的是,你似乎有两个不同的BC充当了记录和#34;为了身份。

blue book中,埃文斯写的有界语境是由意义定义的;当您从一个上下文跨越到另一个上下文时,您可能需要更改对常用术语所理解内容的理解:它不一定遵循一个上下文中聚合的规则(用户?)将是相同的和另一个一样。

给定的例子,用户,可能更加抽搐 - 因为现实世界而不是模型可能是记录簿,而且#34;聚合"真的只是一个愚蠢的数据包。

  

如果我只使用引用ID,那么这意味着,讨论BC将不会在其域中包含必要的数据

需要什么?记录讨论书中的更改是否取决于存储在记录身份簿中的数据?

  

示例,在身份上下文中我有用户名,姓名和姓氏等,但在讨论上下文中,我可能有相同的用户,但表示为主持人或海报,只有该BC的必要属性。如果身份上下文中的名称发生更改,则应将该更改传播到讨论中。

听起来好像是在描述读取所必需的;好像你有一个讨论的视图,其中包括参与者的代表,包括他们的角色(存在于BC讨论中)及其身份。

读取往往不是一个非常有趣的用例,因为读取不会改变记录簿。正如Udi暗示的那样,为了构建视图,您基本上需要一个引用ID,您可以使用它来从一些键值存储中提取您想要的数据。有没有理由更喜欢KV商店是这个 BC的一部分而不是那个一个?

  

消费者可能是第三方公司和我们公司。

直接连接到微服务,或者代替使用api作为支持微服务的外观?