Как совокупный корень удаляет одного из своих потомков? - PullRequest
3 голосов
/ 12 ноября 2009

Если мое понимание Агрегированных Корней правильное, корень также должен быть ответственным за удаление одного из своих «потомков». Это бы выглядело примерно так:

order.removeOrderLine(23);

Что бы эффективно удалить его из коллекции. Однако, как это сохраняется? Должен ли UnitOfWork моего ORM обнаружить, что что-то пропало в этой коллекции, а затем удалить это из базы данных?

Должен ли я использовать метод removeOrderLine для метода OrderRepository?

1 Ответ

4 голосов
/ 12 ноября 2009

Ваша единица работы обычно должна позаботиться об этом, но это зависит от ее реализации, особенно от того, как она обнаруживает изменения. Некоторые реализации единиц работы (например, Hibernate) сохраняют копию агрегата до того, как вы изменили его, поэтому в конце бизнес-транзакции (когда вы вызываете что-то вроде unitOfWork.PersistAll ()), он пытается найти соответствие текущей версии всех объектов ( и коллекции) против оригинальной версии.

Другой способ состоит в том, чтобы сделать ваши доменные объекты более связанными с вашей единицей работы, чтобы сущность уведомляла единицу работы, когда что-то изменяется (т. Е. Метод order.removeOrderLine уведомлял бы единицу работы об изменении). *

Существует несколько способов реализации обнаружения изменений UoW. Взгляните на несколько реализаций hibernat для вдохновения.

...