DDD、微服务和数据方向
DDD, Microservices and data direction
假设我有身份管理有界上下文和讨论有界上下文。其中每一个都是一个单独的微服务。
身份有用户,讨论有版主。
如果我在身份限界上下文中更新名字和姓氏,我的计划是向 Amazon SQS 发布一条消息,并让讨论限界上下文侦听该队列的任何更改,并在讨论中更新名字和姓氏通过反腐败层的上下文。
我的问题是,如果我决定在讨论 BC 中更改名字和姓氏怎么办?我的 Identity BS 是否也应该监听这些变化,或者双向通信不被认为是一种好的做法,我应该始终在 Identity BC 中更新该信息?
人们如何改名?
我会尝试有一个允许这样做的地方,并让该上下文拥有数据。然后其他上下文可以订阅更改并相应地采取行动。
Should my Identity BS listen for that changes too, or having bi-directional communication is not considered a good practice
我认为双向通信不一定是这里的问题。让我担心的是,您似乎有两个不同的 BC 作为身份的 "book of record"。
在 blue book 中,埃文斯写道,限界上下文是由意义定义的;当您从一种上下文跨越到另一种上下文时,您可能需要改变对通用术语所理解的内容的理解:它不一定遵循一种上下文(用户?)中的聚合规则与在另一个。
给定的示例 User 可能更紧张 - 因为现实世界而不是模型可能是记录簿,而 "aggregate" 实际上只是一个愚蠢的包数据.
If I use only reference id, wouldn't that mean that Discussion BC will not have necessary data in its domain
需要什么?讨论记录簿中的更改是否取决于身份记录簿中存储的数据?
Example for, in identity context i have user with username, first name and last name etc, but in discussion context I might have that same user but represented as moderator or poster with only necessary properties for that BC. If name changes in the identity context, it should propagate that changes to discussion.
这听起来好像您将其描述为 阅读 所必需的;就好像你有一个讨论的视图,其中包括参与者的表示,包括他们的角色(存在于讨论 BC 中)和他们的身份。
读取往往不是一个非常有趣的用例,因为读取不会更改记录簿。正如 Udi 所暗示的,要构建视图,您基本上需要一个引用 ID,您可以使用它从某个键值存储中提取您想要的数据。有什么理由更喜欢 KV 存储是 this BC 的一部分而不是 that 的一部分?
Consumers could be 3rd party companies and our company.
直接连接到微服务,还是使用作为支持微服务的外观的 api?
假设我有身份管理有界上下文和讨论有界上下文。其中每一个都是一个单独的微服务。
身份有用户,讨论有版主。
如果我在身份限界上下文中更新名字和姓氏,我的计划是向 Amazon SQS 发布一条消息,并让讨论限界上下文侦听该队列的任何更改,并在讨论中更新名字和姓氏通过反腐败层的上下文。
我的问题是,如果我决定在讨论 BC 中更改名字和姓氏怎么办?我的 Identity BS 是否也应该监听这些变化,或者双向通信不被认为是一种好的做法,我应该始终在 Identity BC 中更新该信息?
人们如何改名?
我会尝试有一个允许这样做的地方,并让该上下文拥有数据。然后其他上下文可以订阅更改并相应地采取行动。
Should my Identity BS listen for that changes too, or having bi-directional communication is not considered a good practice
我认为双向通信不一定是这里的问题。让我担心的是,您似乎有两个不同的 BC 作为身份的 "book of record"。
在 blue book 中,埃文斯写道,限界上下文是由意义定义的;当您从一种上下文跨越到另一种上下文时,您可能需要改变对通用术语所理解的内容的理解:它不一定遵循一种上下文(用户?)中的聚合规则与在另一个。
给定的示例 User 可能更紧张 - 因为现实世界而不是模型可能是记录簿,而 "aggregate" 实际上只是一个愚蠢的包数据.
If I use only reference id, wouldn't that mean that Discussion BC will not have necessary data in its domain
需要什么?讨论记录簿中的更改是否取决于身份记录簿中存储的数据?
Example for, in identity context i have user with username, first name and last name etc, but in discussion context I might have that same user but represented as moderator or poster with only necessary properties for that BC. If name changes in the identity context, it should propagate that changes to discussion.
这听起来好像您将其描述为 阅读 所必需的;就好像你有一个讨论的视图,其中包括参与者的表示,包括他们的角色(存在于讨论 BC 中)和他们的身份。
读取往往不是一个非常有趣的用例,因为读取不会更改记录簿。正如 Udi 所暗示的,要构建视图,您基本上需要一个引用 ID,您可以使用它从某个键值存储中提取您想要的数据。有什么理由更喜欢 KV 存储是 this BC 的一部分而不是 that 的一部分?
Consumers could be 3rd party companies and our company.
直接连接到微服务,还是使用作为支持微服务的外观的 api?