Это выглядит правильно с моей точки зрения. Мне действительно не нравилось повторять имена сервисов и методов репозитория снова и снова в моем проекте asp.net MVC, поэтому я выбрал общий подход / шаблон репозитория. Это означает, что мне действительно нужен только один или два метода Get () в моем репозитории для извлечения моих объектов. Это возможно для меня, потому что я использую Entity Framework, и у меня просто есть метод get () моего репозитория, возвращающий IQueryable. Тогда я могу просто сделать следующее:
Product product = from p in _productRepository.Get() where p.Id == Id select p;
Вероятно, вы можете повторить это в NHibernate с помощью linq -> NHibernate.
Редактировать: Это работает для DDD, потому что это все еще позволяет мне обмениваться моими DAL / репозиториями, пока используемая мной библиотека данных (Nhibernate, EF и т.
Я не уверен, как сделать общий репозиторий без IQueryable, но вы можете использовать функции делегатов / лямбда для его включения.
Edit2: И на тот случай, если я не правильно ответил на ваш вопрос, если вы спрашиваете, должны ли вы вызывать метод Get () вашего хранилища из службы, тогда да, это правильный дизайн DDD, так как Что ж. Причина в том, что сервисный уровень должен обрабатывать всю вашу бизнес-логику, поэтому он точно определяет, как и какие данные извлекать (например, хотите ли вы, чтобы они были в алфавитном порядке, неупорядоченные и т. Д.) Это также означает, что он может выполнять проверку после загрузки, если необходимо, или проверку перед удалением и / или сохранением.
Это означает, что сервисный уровень не заботится о том, как именно эти данные хранятся и извлекаются, он только решает, какие данные хранятся и извлекаются. Затем он вызывает хранилище для правильной обработки запроса и извлечения / сохранения данных в соответствии с указаниями уровня обслуживания. Таким образом, у вас есть правильное разделение интересов.