自引用和层次结构在现实世界的软件项目中并不罕见。可以想到许多示例:
问题是,根据域驱动设计原则,是否可以将自引用类选择为聚合根?您能举一个例子来说明如何实现吗?
答案 0 :(得分:1)
可以将自引用类选择为“聚合根”
如果必须将大型分层的同质树表示为“聚合根”,则很可能会为根实体引入一个不同的类(除了根以外,是同质的),例如CategoryRoot 1--* Category 1--* Category
,这消除了对问这个问题。
如果您确实想要同一个类(不确定是否建议使用),那么您仍然需要某种协议以确保根实例与子实体的区别对待,尽管它们是同一类。例如,您只需要允许存储库返回顶级Category
(例如parent = null
)实例,并且嵌套的Category
实例在没有它们的根目录的情况下不应被访问或引用。 / p>