DDD - 从其他上下文中懒惰地获取信息
DDD - getting information lazily from other contexts
我正在使用域驱动设计实现一个社交网络。
我设计了包含用户 ID、用户名、个人资料图片等的个人资料上下文......在这种情况下,用户可以更改他的用户名
我还有一个用于在用户之间发送消息的消息传递上下文,在这种情况下,我有一个包含用户 ID 和用户名的用户 class,并指出用户在聚合中。
问题是 userName 可以在 Profile 上下文中随时更改,这就是为什么我选择不将消息 class 与用户 class 绑定,否则我会收到带有旧用户名的旧消息.
有什么方法可以让我每次都通过询问 Profile 上下文在消息传递上下文中懒惰地获取用户,如果是的话,在聚合内部使用查询是否很好?
这是您第一次需要从一个 BC 到另一个 BC 获取信息吗?如果不是,信息如何在您的系统中从一个 BC 传递到另一个?
我发现跨 BC 传递信息的最佳方式是通过您的域对象发出的事件,并让您的 BC 订阅这些事件,保留数据的本地副本。在你的情况下你会:
(假设 Profile BC 发出 'userNameChangedEvent')让您的 Messaging BC 订阅该事件,并让它保留 'cut down' 版本的用户 - 也许它只需要 UserID 和 UserName .这样,当您的用户发布一条消息时,Messaging BC 只需查询自己的 slim User Table 即可获取用户名。
这种方法的一个警告是 Eventual Consistency。也就是说,假设用户更改了他们的名字,然后立即发布了一条消息...您如何保证在发布消息时用户名已在 Messaging BC 上更新。
我正在使用域驱动设计实现一个社交网络。 我设计了包含用户 ID、用户名、个人资料图片等的个人资料上下文......在这种情况下,用户可以更改他的用户名 我还有一个用于在用户之间发送消息的消息传递上下文,在这种情况下,我有一个包含用户 ID 和用户名的用户 class,并指出用户在聚合中。 问题是 userName 可以在 Profile 上下文中随时更改,这就是为什么我选择不将消息 class 与用户 class 绑定,否则我会收到带有旧用户名的旧消息. 有什么方法可以让我每次都通过询问 Profile 上下文在消息传递上下文中懒惰地获取用户,如果是的话,在聚合内部使用查询是否很好?
这是您第一次需要从一个 BC 到另一个 BC 获取信息吗?如果不是,信息如何在您的系统中从一个 BC 传递到另一个?
我发现跨 BC 传递信息的最佳方式是通过您的域对象发出的事件,并让您的 BC 订阅这些事件,保留数据的本地副本。在你的情况下你会:
(假设 Profile BC 发出 'userNameChangedEvent')让您的 Messaging BC 订阅该事件,并让它保留 'cut down' 版本的用户 - 也许它只需要 UserID 和 UserName .这样,当您的用户发布一条消息时,Messaging BC 只需查询自己的 slim User Table 即可获取用户名。
这种方法的一个警告是 Eventual Consistency。也就是说,假设用户更改了他们的名字,然后立即发布了一条消息...您如何保证在发布消息时用户名已在 Messaging BC 上更新。