У меня есть вопрос относительно проверки уникальности в DDD. У меня уже есть некоторые вопросы об этом в stackoverflow, но они на самом деле не отвечают на мои сомнения.уникальная проверка в DDD
Возможно ли, чтобы агрегированный корень сохранял ссылку на репозиторий для проверки уникальности при обновлении/вставке в базу данных? Или это задача, выполняемая службой приложений вместо модели домена?
Скажем, я хочу, чтобы проверить, является ли имя пользователя модели пользователя является уникальным, когда пользователь Есть несколько подходов, которые я могу думать:
- пользователя модель эталонного UserRepository, сделать проверки уникальности в Validate()
- Создайте службу домена, чтобы выполнить проверку уникальности, используя UserRepository (это кажется немного странным для меня, потому что я думаю, что обычно служба домена используется только в случае, если логический диапазон более чем для нескольких моделей домена)
- Создать объект спецификации в доменном слое, применительно к использованию rRepository инкапсулировать уникальные правила проверки, и использование услуг прикладного уровня, чтобы это сделать проверку перед обновлением/вставить
И если я использую инъекции зависимостей, я все еще задаюсь вопрос о том, как внедрить UserRepository в пользователь в подходе 1, или службу домена в подходе 2 или службу приложения в подходе 3, потому что в любом случае для объекта/объекта службы/спецификации пользователя/домена мне нужно создать экземпляр объекта вручную, поэтому единственная опция, с которой я, похоже, использую локатор службы в IoC для получения экземпляра. Но служба поиска является анти-модель, поэтому я хочу, чтобы избежать его
Любой образец кода будет оценено
Я бы сказал, что вы должны реализовать это на сервисном уровне. Чтобы быть более конкретным, определите класс валидатора для определенного типа бизнес-логики (ваша команда) и обработайте проверку в декораторе, который вы обернете вокруг класса обслуживания. – Steven
Было бы полезно? http://stackoverflow.com/a/11958251/625332 – Dmitry
@Steven, поэтому я должен создать UserValidator для реализации проверки для пользователя на уровне сервиса? Рассматривается ли утечка бизнес-правила (уникальность имени пользователя) вне уровня домена? –