【问题标题】:DDD - getting information lazily from other contextsDDD - 从其他上下文中懒惰地获取信息
【发布时间】:2017-06-29 15:31:48
【问题描述】:
我正在使用领域驱动设计实现一个社交网络。
我设计了包含用户 ID、用户名、个人资料图片等的配置文件上下文......在这种情况下,用户可以更改他的用户名
我还有一个消息上下文,用于在用户之间发送消息,在这个上下文中,我有一个包含 userID 和 userName 的 User 类,注意到 User 在聚合中。
问题是用户名可以在配置文件上下文中随时更改,这就是我选择不将消息类与用户类绑定的原因,否则我会得到带有旧用户名的旧消息。
有没有办法让我每次都可以通过询问 Profile 上下文来让用户懒洋洋地进入消息传递上下文,如果是的话,在聚合中使用查询是否很好?
【问题讨论】:
标签:
domain-driven-design
bounded-contexts
【解决方案1】:
这是您第一次需要从一个 BC 到另一个 BC 获取信息吗?如果不是,您的系统中的信息是如何从一个 BC 传递到另一个 BC 的?
我发现跨 BC 传递信息的最佳方式是通过域对象发出的事件,并让您的 BC 订阅这些事件,保留数据的本地副本。在你的情况下,你会:
(假设 Profile BC 发出“userNameChangedEvent”)让您的 Messaging BC 订阅该事件,并让它保持用户的“缩减”版本 - 也许它只需要 UserID 和 UserName。这样,当您的用户发布消息时,Messaging BC 只需查询其自己的苗条用户表,以获取用户名。
这种方法的一个警告是 Eventual Consistency 。也就是说,假设一个用户更改了他们的名字,然后立即发布了一条消息……你怎么能保证在消息发布时用户名已经在 Messaging BC 上更新了。