Mic*_*che 2 domain-driven-design
我有包括实体的集合A,AbstractElement,X,Y和Z.根实体A也有一个列表AbstractElement.实体X,Y并Z继承自AbstractElement.我需要添加的情况的可能性X,Y并Z以实例A.一种方法是使用一种方法,用于每种类型的,即addX,addY和addZ.这些方法将创建实例所需的值作为参数X,Y和Z.但是,每次我添加一个继承的新类型时AbstractElement,我都需要修改实体A,所以我认为这不是最好的解决方案.
另一种方法是使用抽象添加方法addAbstractElement来添加AbstractElement实例.但是,在这种情况下,该方法将参数作为参数AbstractElement.由于此方法将由位于聚合之外的实体调用,因此在DDD规则/建议之后,这些外部实体是否有权创建实例AbstractElement?我在Eric Evans的书中读到外部实体没有被授权保存除根之外的聚合实体的引用?
这类问题的最佳做法是什么?
谢谢
从埃文的书,第139页:
"如果你需要在预先存在的AGGREGATE中添加元素,你可以在AGGREGATE的根目录上创建一个FACTORY方法"
这意味着,您应该在根(A)上创建一个工厂方法,它将获取AbstractElement的详细信息.此方法将根据某个决策参数创建AbstractElement(X/Y/Z),并将其添加到其AbstractElements的内部集合中.最后,此方法返回新元素的id.
最好的祝福,