2009-04-16 4 views
3

Я хочу следовать философии DDD, а не напрямую обращаться к объектам объектов совокупности. Итак, я должен вызвать корневой объект, чтобы получить связанный объект. Но в других случаях я не всегда хочу, чтобы каждый ассоциированный объект загружался при вызове корня. Это цель ленивой загрузки?Доступ к агрегированным объектам без ленивых Loading

Как получить доступ к объектам объекта через корневой каталог без загрузки всех связанных объектов каждый раз, если я отключу функцию lazyloading linq?

EDIT:

Например, если у меня есть человек, как Коренная Сущность, и лицо имеет имена, адрес и OwnedProperties. Если я хочу получить список людей, чтобы я мог отображать их имена, я не обязан каждый раз загружать Собственные свойства каждый раз при вызове в репозиторий. И наоборот, на другой странице я могу показать список OwnedProperties, но не хочу, чтобы другая информация загружалась при вызове. что такое простой способ просто вызвать Личность без объекта собственности, кроме создания объекта нового человека без принадлежащих ему свойств?

+0

Вы можете указать конкретный пример? –

+0

Наверное, нет. DDD является одним из тех неопределенных наборов принципов, которые не имеют реальных примеров. – cletus

+1

@Cletus, есть много конкретных примеров .. см. Книгу Эванса ... –

ответ

1

Я не думаю, что это возможно без ленивой загрузки.

  • Получение всех данных за один раз: жадная загрузка
  • Получение данных при доступе: Ленивый Загрузка
1

Согласно правки: Что делать в таких ситуациях, это создать класс «View» или класс «DTO», который просто содержит интересующие меня свойства. Например, у меня может быть класс PersonView, который имеет только свойство Name.

Затем, используя мой OR/M mapper (я использую NHibernate), я создаю запрос HQL (или запрос Criteria), который работает на моем объекте Person. Перед выполнением запроса я говорю NHibernate, что я хочу, чтобы объекты PersonView в результате (я указываю проецирование). Затем NHibernate достаточно умен, чтобы выполнить запрос, который извлекает только столбцы, необходимые для заполнения экземпляров PersonView.

+0

в вашем случае, разве ваш репозиторий должен иметь перегрузки для каждого сценария, а затем решить, какой метод вызывать в репозитории? – zsharp

+0

Как именно вы имеете в виду? У меня был бы метод в моем репозитории, который называется «FindPersons», например, который возвращает экземпляры PersonView. –

0

Один из способов избежать ленивой загрузки - просто использовать объект 'id'