У меня есть агрегат, который включает в себя сущности 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
? Я прочитал в книге Эрика Эванса, что внешние сущности не имеют права хранить ссылки на сущности совокупности, отличные от корня?
Какова наилучшая практика для такого рода проблем?
Спасибо