【发布时间】:2016-01-28 17:03:45
【问题描述】:
首先,不要认为我试图让其他人完成工作,但我正在尝试为域模型设计类图,而我所做的事情可能是错误的,因为我被卡住了,所以我只是想获得关于我没有正确执行的提示以继续...
例如,用户需要从产品列表中按类别搜索产品。每个类别可能有子类别,子类别可能有子类别等。
用户还需要获得至少有一种产品的类别树形列表。 例如,如果这是所有类别树:
- 乐器
- 风
- 字符串
- 吉他
- 小提琴
- 打击乐
- 书籍
- 漫画
- 小说
- 浪漫
我无法返回类别树至少有一个产品,因为我还会获得所有子类别,但不是每个子类别都有与之关联的产品。
我也无法从 Category.subCategories 集合中删除项目以仅保留具有关联产品的项目,因为它会更改 Category 实体,该实体可能会在其他地方共享,这不是我想要的。
我想过做一个副本,但我会在同一上下文中获得同一实体的 2 个不同实例,这不是一件坏事吗?
现在每个类别都没有我不想要的子类别的集合,我只知道它的父类别,这没关系。
但是,这会创建一个只能从底部到顶部导航的类别树,对于始终需要顶部 -> 底部导航类别的 ProductList 客户端来说,这是没有意义的。
作为一个解决方案,我想到了下图,但我不确定它是否很好,因为它有点重复,而且 CategoryTreeItem 在域语言中似乎没有多大意义。
我做错了什么?
【问题讨论】:
-
其实category中的自引用创建了一棵树。
-
@ThomasKilian 我在第二张图之后更新了关于没有树的声明。实际上有一棵树,但 ProductList 的客户端总是需要一个 top->bottom 可导航树,但在这种情况下,树只能从底部到顶部导航
-
第一个变体可以双向导航。一个通过集合/组合,反之亦然通过父级。
标签: uml domain-driven-design class-diagram