如何在具有多个有界上下文的系统中自动(或至少正确地)创建用户?

How can I atomically (or at least properly) create User in the system with multiple bounded contexts?

我需要在系统中注册用户。没有角色就不能存在用户(没有登录名和密码他肯定不能存在)。管理员应该能够通过选择角色、写入 login/password 和一些用户信息来添加新用户。 Login/password/security 关注点作为单独的 application/BC(身份验证上下文)实现,角色和权限在授权上下文中,用户信息在单独的帐户管理上下文中。如果理论上所有这些上下文都可以部署在不同的机器上,我该如何实施用户注册过程?现在我正在使用应用程序接口,它使用基础设施服务实现来同步和原子地向不同的 BCs 发送所有需要的命令(目前它是同一个大应用程序)。

为此您需要一个分布式事务服务器。 Java 有分布式事务 (JTA) 标准。

一个简单的架构答案:使用 Saga(或 Process Manager)来协调所有这些。

您有一个包含三个微服务的架构。集成微服务有两个门槛:Orchestration and Choreography。 A Saga 使用编排。

阅读有关 differences between them 的更多信息。

更新: 我觉得Account management应该是主BC。用户在这里诞生,最初没有角色或身份验证意义。然后,它被赋予一个角色、一个目的,然后,在它被设置之后,一个用户名和一个密码。这应该是顺序。

可能您的限界上下文的粒度太细了。当您所指的概念是多个限界上下文中的完全相同事物时,通常会表明这一点。

诸如User管理(注册/身份验证/授权)之类的事情通常由身份和访问控制限界上下文处理。

User 在您的下游限界上下文中会有不同的含义/概念:例如作者、导师等

但是,如果您确定需要该级别的粒度,那么您将不得不为您的用户选择一个记录系统并且那个 有界上下文将拥有用户并负责流程管理器状态并确保注册完成;虽然,我通常喜欢将我的流程管理本身作为一个有界上下文,并且 可以与其他人进行协调。

至于原子地这样做......我不知道这是否一定是明智的尝试:)