2012-05-04 3 views
0

В настоящее время я разрабатываю приложение среднего размера. Приложение будет иметь структуру n-уровня с различными уровнями представления. Одна часть будет веб-приложением, но вполне вероятно, что будут и другие части, касающиеся, например, сенсорной связи (для которой не ясно, как она будет развиваться на данном этапе).NHibernate session в BusinessLogic с ленивой загрузкой

Мой вопрос в том, можно ли использовать NHibernate непосредственно на уровне бизнес-логики и позволить бизнес-логике обеспечить верхний и горизонтальный слои/детали запрошенными данными при ленивой загрузке.

Возможно ли инициализировать сеанс в бизнес-слое и по-прежнему иметь ленивую загрузку? В таком случае, как будет обрабатываться сессия? Можно ли обернуть запрошенные данные вместе с сеансом, чтобы сеанс был жив до тех пор, пока объект жив?

Имейте славный день.

ответ

0

Не уверен, что я полностью понимаю ваш вопрос, но из того, что я собираю, вы спрашиваете, можете ли вы использовать ленивую загрузку, если ваш клиент не является веб-клиентом.
Ответ: да; неважно, как и где был инициализирован ваш Session.

Использование nHib непосредственно в бизнес-слое считается наилучшей практикой некоторых (включая меня).

Что касается Вашего вопроса о «завернуть запрошенные данные вместе с сессией, так что сессия в живых до тех пор, пока объект находится alive'-
Я не уверен, что вы имеете в виду, но если вы имеете в виду отправки модели классы вместе с сеансом, чтобы ваш клиент мог лениво загружать свои свойства - я бы настоятельно рекомендовал не туда идти.
Правило большого пальца состоит в том, что вы даете клиенту только, что ему нужно, и ничего более.
(Ayende elaborates на этом.)
По этой причине, я думаю, вы всегда должны общаться с вашим клиентом, используя DTO.

Как я бы установить это является:
Клиента запрашивает данные с сервера => сервер загружает объект (но не инициализировать ленивое нагруженное свойство), заполняет DTO и возвращает его клиенту.

Клиент запрашивает объект с ленивым загрузчиком => сервер загружает объект (используя либо второй уровень nHib cache, либо какой-либо другой механизм кэширования), загружает запрошенное свойство и возвращает DTO клиенту.

Смежные вопросы