Итак, вот сценарий:
DDD утверждает, что вы используете хранилище для получения корня агрегата, а затем используете его для добавления/удаления в любые коллекции, которые у него есть.
Добавление простое, вы просто вызываете .Add(Item item)
на Collection
, в которую хотите добавить. При сохранении в базу данных добавляется новая строка. Однако удаление происходит иначе - вызов .Remove(Item item)
не удаляет элемент из базы данных, а просто удаляет внешний ключ. Поэтому, хотя да, технически он больше не является частью коллекции, он все еще находится в базе данных.
Читая вокруг, единственное решение - удалить его с помощью контекста данных. Но согласно DDD объект домена не должен знать о контексте данных, поэтому удаление должно быть выполнено вне домена.
Как правильно поступить в этом случае? Или допустимо ли оставить базу данных полной сирот (возможно, запустить процедуру для их удаления)?