Как стать автором
Обновить

Hibernate: использование lazy initialization в разработке клиент-серверного приложения

Время на прочтение 3 мин
Количество просмотров 48K
Java *
При проектировании доменов приложения, разрабатываемого с использованием Hibernate, разработчику необходимо сделать выбор: инициализировать ли свойства домена, соответствующие коллекциям связанных доменов, сразу (FetchType=EAGER) или же делать это только при обращении к ним (FetchType=LAZY). На самом деле в случае, когда предметная область имеет сколь-либо сложную структуру связей между объектами, выбор уже сделан – загружать полбазы ради одного объекта, как это было бы при FetchType=EAGER, мягко говоря, неразумно. Поэтому ленивая инициализация в случае коллекций есть наиболее предпочтительная стратегия инициализации связанных объектов.

Однако, не всё так просто. Ленивая инициализация реализуется за счёт создания прокси-объекта с помощью JDK Dynamic Proxy или библиотеки CGLIB. В обоих случаях проксирование соответствующих get-методов сводится к обращению к сессии Hibernate для получения необходимых данных. Последнее же в свою очередь означает, что обращение к ленивым свойствам объекта может быть осуществлено только при наличии сессии Hibernate. В противном случае, попытка получить свойство объекта приведёт к незабвенному исключению «LazyInitializationException: could not initialize proxy — the owning Session was closed».

Читать дальше →
Всего голосов 24: ↑19 и ↓5 +14
Комментарии 46

Способ проксирования JPA сущностей для клиента (борьба с lazy initialization)

Время на прочтение 2 мин
Количество просмотров 5.6K
Java *
Из песочницы
Недавно, увидев на Хабре пост про борьбу с lazy initialization в Hibernate, я заинтересовался – прочитал сам пост и ждал пока наберется побольше комментариев – не предложит ли кто-нибудь способ, которым данную проблему решили мы. Ничего похожего я не увидел. Способ под катом.
Читать дальше →
Всего голосов 25: ↑21 и ↓4 +17
Комментарии 29

PDO: сериализация, поздняя инициализация и PHPUnit

Время на прочтение 1 мин
Количество просмотров 1.5K
PHP *
Здравствуйте. Как известно, PDO не поддерживает сериализацию. С этим связано несколько интересных вещей, в частности сюрпризы с трейсами и невозможность сделать mock от PDO в PHPUnit.

Я активно использую PHPUnit и реализуя в очередной раз паттерн Dependency Injection столкнулся с описанными трудностями создания Mock-объекта от PDO.

И что же получилось?
Всего голосов 15: ↑10 и ↓5 +5
Комментарии 4

Нужны ли в JavaScript классы?

Время на прочтение 6 мин
Количество просмотров 102K
Разработка веб-сайтов *JavaScript *Программирование *
JavaScript принято считать прототип-ориентированным языком программирования. Но, как ни странно, этим подходом практически никто не пользуется: большинство популярных JS-фреймворков явно или неявно оперируют классами.
В этой статье я хочу рассказать об альтернативном способе программирования на JavaScript, без использования классов и конструкторов — чистым прототипным ООП и особенностях его реализации на ECMA Script 5.
Читать дальше →
Всего голосов 164: ↑140 и ↓24 +116
Комментарии 60

$mol: reactive micromodular ui-framework

Время на прочтение 28 мин
Количество просмотров 20K
Разработка веб-сайтов *CSS *JavaScript *Node.JS *$mol *

Сколько нужно времени, чтобы просто вывести на экран большой список, используя современные фреймворки?


Список на 2000 строк ReactJS AngularJS Raw HTML SAPUI5 $mol
Появление списка 170 ms 420 ms 260 ms 1200 ms 50 ms
Обновление всех его данных 75 ms 75 ms 260 ms 1200 ms 10 ms

Напишем нехитрое приложение — личный список задач. Какие у него будут характеристики?


ToDoMVC ReactJS AngularJS PolymerJS VanillaJS $mol
Размер ( html + js + css + templates ) * gzip 322 KB 326 KB 56 KB 20 KB 23 KB
Время загрузки 1.4 s 1.5 s 1.0 s 1.7 s 0.7 s
Время создания и удаления 100 задач 1.3 s 1.7 s 1.4 s 1.6 s 0.5s

Небольшая головоломка: перед вами синхронный код, загружающий и обрабатывающий содержимое 4 файлов, но с сервера они грузятся параллельно. Как такое может быть?


Синхронная параллельная загрузка ресурсов


А теперь прошу за мной в кроличью нору, настало время удивительных историй...

Читать дальше →
Всего голосов 54: ↑46 и ↓8 +38
Комментарии 150

И снова о лени

Время на прочтение 4 мин
Количество просмотров 7.7K
Программирование *Java *
Из песочницы
Добрый день!

Как известно «лень — двигатель прогресса», самое полезное качество программиста, благодаря ей появилось множество замечательных фреймворков и так далее, и тому подобное. Но сегодня я хочу написать не про человеческую лень.

Пару недель назад мне попалась на глаза статья о черновом наброске фичи, новом модификаторе lazy для final полей. И конечно, инициализация логгеров приведена как самый наглядный пример, когда бы эта фича пригодилась. Нет, никто не спорит, конечно логгеры это overhead, создавать их во время старта, потом еще в памяти держать. Брр. Но неужели нельзя написать элегантный костыль решение на старой доброй Java?
Давайте попробуем
Всего голосов 16: ↑12 и ↓4 +8
Комментарии 8

Ленивая инициализация в Spring Boot 2.2

Время на прочтение 4 мин
Количество просмотров 9.5K
Блог компании Haulmont Java *
Перевод


От переводчика: поскольку Spring Framework является одним из основных фреймворков, на которых мы строим CUBA, то новости о новых возможностях Spring не проходят незаметно для нас. Ленивая инициализация — один из способов уменьшить время первой загрузки приложения, что в наш век повсеместного использования микросервисов является важной метрикой. Для тех, кто предпочитает чтению просмотр видео, есть 10-ти минутное выступление Josh Long, посвященное теме статьи.


Недавно анонсированный первый milestone релиз Spring Boot 2.2 добавляет поддержку ленивой инициализации. В этой статье мы рассмотрим новую функциональность и объясним, как ее включить.

Читать дальше →
Всего голосов 20: ↑16 и ↓4 +12
Комментарии 3

Ленивая инициализация в C#

Время на прочтение 4 мин
Количество просмотров 26K
.NET *C# *
Туториал
Отложенная инициализация или «ленивая» инициализация — это способ доступа к объекту, скрывающий за собой механизм, позволяющий отложить создание этого объекта до момента первого обращения. Необходимость ленивой инициализации может возникнуть по разным причинам: начиная от желания снизить нагрузку при старте приложения и заканчивая оптимизацией редко используемого функционала. И действительно, не все функции приложения используются всегда и, тем более, сразу, потому создание объектов, реализующих их, вполне рационально отложить до лучших времён. Я хотел бы рассмотреть варианты ленивой инициализации, доступные в языке C#.
Читать дальше →
Всего голосов 56: ↑51 и ↓5 +46
Комментарии 17

[Opinion] Lazy Properties Are Good. That Is How You Are to Use Them

Время на прочтение 7 мин
Количество просмотров 5.2K
.NET *C# *ООП *Промышленное программирование *

Let me also say a word about properties. I'm going to consider a good use of them for immutable records in C#.

I am a big fan of code design, so in this article I want to cover existing approaches and show what, I think, is a better solution.

ReadMore() →
Всего голосов 5: ↑4 и ↓1 +3
Комментарии 10

Загрузка ленивых полей

Время на прочтение 8 мин
Количество просмотров 5K
Java *
☕️ Cезон Java

Привет, хабр! Сегодняшняя статья навеяна довольно стандартной ситуацией – существует некий «большой» объект, но для работы приложения далеко не всегда требуется загружать его полностью в память. Для решения такой проблемы существует ленивая загрузка полей. Суть её состоит в том, что загрузка поля объекта откладывается до того момента, как оно [поле] понадобится.

Читать далее
Всего голосов 6: ↑3 и ↓3 0
Комментарии 9