【发布时间】:2016-02-04 09:33:48
【问题描述】:
例如,假设一家商店有多个菜单。菜单列表项和一项可以在多个菜单中列出。
想象一个 Menu 聚合根和 Item 聚合根。一个 Menu 将包含一个 MenuItem 的集合,这些 MenuItem 引用一个 Item AR 以及特定菜单中的订购信息。
我的问题是,您将如何从 MenuItem 访问项目的名称、价格、描述。比如说,菜单 AR 处理一个按价格重新排序的命令(我知道这听起来与 UI 相关,但我在这里严格地说是域模型,idk 也许这是一个业务规则,菜单必须在具体方式?)
你会为 MenuItem 中的项目 AR 获取一个值对象吗?如果是这样,Menu AR 是否会持有对域服务的引用以查找 Item 的值对象,或者 MenuItem 是否会使用域服务。
我猜,Menu AR 应该始终保持一致,这可能意味着当将 Item 添加到 Menu 时,MenuItem 包含对 Item 值对象的引用。
听起来这样会破坏“通过身份引用实体”规则,因此 MenuItem 将持有对 ItemId 的引用。考虑到事件溯源的使用,每当您想对 Menu AR 应用命令时,它都会重播所有事件,使其保持一致,然后您发出命令以重新排序菜单项。
MenuItem 将只有一个 ItemId 而没有该项目的详细信息,现在是加载这些项目的时间吗? Menu 可以遍历它的 MenuItems,然后使用服务通过 ItemId 为每个 MenuItem 查找 Item 值对象,然后执行排序。
感谢您的任何意见,非常感谢。
【问题讨论】:
标签: domain-driven-design cqrs event-sourcing aggregateroot