В настоящее время я определяю сущности, объекты-значения и агрегаты в системе. Скажем, были определены следующие сущности:
Клиент, CustomerEmail, электронная почта, CustomerAddress, Address, AddressType
, где Клиенты -> Электронные письма - это отношение многие ко многим, как и Клиенты -> Адреса (с типом адреса). Эти отношения представлены объектами отношений CustomerAddress и CustomerEmail.
Первоначально я думал, что это было прямо:
Сущности: Customer, CustomerEmail, CustomerAddress
Объекты значения: электронная почта, адрес, AddressType
с Заказчиком, являющимся агрегатным корнем для агрегата, содержащего все сущности и VO, указанные выше.
Проблема, с которой я столкнулся (и это может быть, когда я узнаю о концепциях агрегатов по мере продвижения вперед) Скажем, у вас есть Поставщик, который отражает вышеупомянутую совокупность Клиентов, используя те же объекты значений Address и Email. В этом случае, когда Клиент удален, адрес и электронная почта не должны быть удалены, поскольку Поставщик или даже другой клиент все еще могут ссылаться на них. Я видел много документации, которая предлагает, когда агрегат удаляется, все в пределах границы агрегата удаляется одновременно. Прав ли я, если предположить, что это не относится к объектам-значениям в совокупности (т. Е. Они неизменны ... если бы у нас был цветовой объект зеленый в совокупности транспортных средств ... вы бы не удалили цвет только потому, что автомобиль был удален) или электронная почта и адрес должны быть собственными сущностями (и агрегатами), поскольку два адреса, даже если они могут иметь одинаковые атрибуты, являются фактическими отдельными идентификаторами (т. е. один - это адрес поставщика, а другой - адрес клиента?)
Наконец, если они действительно являются объектами значений, как можно поступить с делом, в котором они должны быть удалены (ни один из поставщиков или клиентов не ссылается на адрес), если на VO можно воздействовать только через их совокупный корень?
Приветствия
Стив