自引用类为汇总根

时间:2019-01-22 21:32:25

标签: architecture domain-driven-design

自引用和层次结构在现实世界的软件项目中并不罕见。可以想到许多示例:

  • 产品类别
  • 树状的地理区域结构

问题是,根据域驱动设计原则,是否可以将自引用类选择为聚合根?您能举一个例子来说明如何实现吗?

1 个答案:

答案 0 :(得分:1)

  

可以将自引用类选择为“聚合根”

如果必须将大型分层的同质树表示为“聚合根”,则很可能会为根实体引入一个不同的类(除了根以外,是同质的),例如CategoryRoot 1--* Category 1--* Category,这消除了对问这个问题。

如果您确实想要同一个类(不确定是否建议使用),那么您仍然需要某种协议以确保根实例与子实体的区别对待,尽管它们是同一类。例如,您只需要允许存储库返回顶级Category(例如parent = null)实例,并且嵌套的Category实例在没有它们的根目录的情况下不应被访问或引用。 / p>