Я пытаюсь настроить правильную архитектуру домена, используя Fluent NHibernate и Linq to NHibernate. У меня есть свои контроллеры, вызывающие мои классы репозитория, которые выполняют NHibernate и передают обратно ICollections данных. Кажется, это работает хорошо, потому что абстрагирует доступ к данным и сохраняет функциональность NHibernate в «мелком шрифте».
Однако сейчас я нахожу ситуации, когда моим контроллерам нужно использовать одни и те же вызовы данных в другом контексте. Например, мой репо возвращает список пользователей. Здорово, когда я хочу отобразить список пользователей, но когда я хочу начать использовать дочерние классы для показа ролей и т. Д., Я сталкиваюсь с проблемами SELECT N + 1. Я знаю, как это изменить в NHibernate, чтобы он вместо этого использовал соединения, но мой конкретный вопрос: ГДЕ я могу поместить эту логику? Я не хочу, чтобы каждый вызов GetAllUsers () также возвращал роли, но я хочу, чтобы некоторые из них.
Итак, вот мои три варианта, которые я вижу:
- Измените настройку в моем сопоставлении, чтобы роли присоединились к моему запросу.
- Создание двух вызовов репозитория - GetAllUsers () и GetUsersAndRoles ().
- Верните мой объект IQueryable из репозитория в контроллер и используйте метод NHibernate Expand.
Извините, если я не очень хорошо объяснил это. Я просто прыгаю в DDD, и эта терминология для меня все еще нова. Спасибо!