Я новичок в DDD, но я стараюсь втиснуть как можно больше как можно быстрее. Я использовал https://github.com/dotnet-architecture/eShopOnContainers в качестве руководства по структурированию моего кода с помощью Mediatr и EF Core.
К счастью для этого приложения, персистентность и модель предметной области одинаковы. К сожалению, для меня мой уровень данных не соответствует нашей модели предметной области, так как это устаревшая база данных.
Итак, я отделяю домен от постоянства, что хорошо и хорошо. Но мне трудно понять, где, если я сделаю этот блок кода в обработчике команд (пытаясь сделать его простым и понятным) ...
var aggregate = repo.GetById(1234);
aggregate.AddItemToList(item);
repo.SaveChanges();
Как я могу вызвать базовый контекст базы данных для репо, чтобы быть в курсе примененных изменений. Единственное, что я могу придумать, - это иметь вызов repo.Update (агрегатный), который затем будет пытаться применить вызовы db для обновления различных мест db.
Мне это кажется запахом.
Любые идеи были бы замечательными.
Спасибо!
Изменить: должен ли шаблон репозитория с отдельным доменом и уровнем постоянства возвращать модель уровня пресистентности или модель домена?
Например: у меня есть совокупная Компания. И у меня есть таблица базы данных под названием CompanyLegacy, которая моделируется на уровне постоянства с использованием ядра структуры сущностей.
Должен ли мой репозиторий быть CompanyLegacyRepository или CompanyRepository? Если CompanyRepository, это будет означать, что я запрашиваю таблицу CompanyLegacy и сопоставляю ее с моделью домена компании, а затем возвращаю ее. Эта модель не подлежит отслеживанию. Вот откуда моя проблема.
Но если я должен использовать CompanyLegacyRepository, то, похоже, это не соответствует рекомендациям DDD, в которых все действия должны применяться к совокупности root.