Описание тега open-session-in-view
Открытый сеанс в представлении (OSIV) - это шаблон, в котором контекст постоянства (сеанс) открыт и доступен на уровне представления и закрывается в конце HTTP-запроса.
Открытый сеанс в представлении (OSIV) - это шаблон, в котором контекст постоянства (сеанс) открыт и доступен на уровне представления и закрывается в конце HTTP-запроса. Этот шаблон стал заметным в Spring/Hibernate, поэтому появилась возможность перемещаться между сущностями ORM (Hibernate/JPA) для их рендеринга без получения известного "LazyInitializationException" (LIE) из инфраструктуры Hibernate.
Контекст присутствия (сеанс) может быть открыт в начале запроса, но есть решения, как сделать это по запросу - что предпочтительно, если сеанс не всегда необходим.
Плюсы использования OSIV:
- легко вносить изменения в уровень представления, не изменяя уровень обслуживания / бизнес-логику, если можно перемещаться к информации по объектам (альтернативой является предварительная выборка всего на бизнес-уровне)
Минусы решения:
- нет четкого разделения ответственности,
- презентация может лениво извлекать объекты, более низкая производительность (без уровня обслуживания, чтобы даже знать об этом), часто приводит к известной проблеме выбора N+1,
- обычно транзакция закрывается в конце запроса, что слишком поздно для бизнес-логики для обработки исключений (это можно решить, используя более короткую транзакцию вокруг вызова бизнес-уровня, а не вокруг всего сеанса)