powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate и ValueObject
25 сообщений из 26, страница 1 из 2
Hibernate и ValueObject
    #33379326
220 V
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Объясните, зачем нужно (и нужно ли) использовать ValueObject вместо самого hibernate-класса. Иначе говоря, из SessionFacade возвращать не hibernate-классы, а POJO-классы с теми же полями (ну, возможно, с некоторыми изменениями), что и в hibernate-классах. Подозрение, что как-то связано с безопасностью, в смысле недопущения нечаяных изменений в БД. Или архитектурный аспект.
...
Рейтинг: 0 / 0
Hibernate и ValueObject
    #33379438
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
обычно нет, если только не стоит задача передавать hibernate domain в каком-то неполном, упакованном или еще каком виде, а не целиком
...
Рейтинг: 0 / 0
Hibernate и ValueObject
    #33571593
jdo123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuriобычно нет, если только не стоит задача передавать hibernate domain в каком-то неполном, упакованном или еще каком виде, а не целиком

Что значит обычно нет? Обычно не стоит передавать value-объект?
Или как? Я вот как раз с такой архитектурой столкнулся в реальонм приложении и не очень понятно, зачем это нужно - конвертить объекты туда-сюда.
...
Рейтинг: 0 / 0
Hibernate и ValueObject
    #33571615
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в общем то обычно не нужно, хотя бы потому что hibernate как раз и работает с POJOs, которые и являются в общем-то ValueObject'ами....
...
Рейтинг: 0 / 0
Hibernate и ValueObject
    #33571700
jdo123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuriв общем то обычно не нужно, хотя бы потому что hibernate как раз и работает с POJOs, которые и являются в общем-то ValueObject'ами....

Может, это иногда повышает производительность - допустим, вы делаете поиск дляюзера, и потом в табличку впихиваете результат. Может оказаться, что value-объект содержит гораздо меньше полей, чем весь объект в Hibernate, соответсвующий некоторой таблице в СУБД, и засчёт lazy loading может экономия? Или ещё что-то в этом духе...
...
Рейтинг: 0 / 0
Hibernate и ValueObject
    #33571719
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я как раз эти случаи и имел в виду здесь
...
Рейтинг: 0 / 0
Hibernate и ValueObject
    #33571767
М.Голованов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-первых, я всегда использую классы Hibernate везде, где это не вызывает проблем (а не вызывает почти никогда). Нужно только не забывать их аккуратно отсоединять от сессий. Последствия неотсоединения для CRUD бинов, полагаю, объяснять не надо.

Во-вторых, программируя работу с некоторой таблицей, я в большинстве случаев определяю один "полный" CRUD бин и один (а иногда и несколько) "сокращенных" R бинов с нужными ("основными" в определенном контексте) полями. Эти бины "легкие", напортить в базе через них в принципе нельзя. Если мне нужно где-то показать список записей с "основными" полями, тут-то как раз эти R бины в самый раз. В UI приличного приложения списки появляются сплошь да рядом, и иметь "списочный" R бин разумно почти для каждой таблицы (ну, кроме таблиц связок, может быть, классификаторов и так далее - где выбрасывать нечего или почти нечего).
...
Рейтинг: 0 / 0
Hibernate и ValueObject
    #33571822
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
М.Голованов

А эти r-бины с помощью hql запросов создать было нельзя?
...
Рейтинг: 0 / 0
Hibernate и ValueObject
    #33572199
М.Голованов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Невыгодно. Объяснить, почему?
...
Рейтинг: 0 / 0
Hibernate и ValueObject
    #33572211
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да в общем-то как хотите...
...
Рейтинг: 0 / 0
Hibernate и ValueObject
    #33572689
AndreySerj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
220 VОбъясните, зачем нужно (и нужно ли) использовать ValueObject вместо самого hibernate-класса...
Сори, может не верно понял вопрос.
ValueObject и POJO - это разные вещи. POJO подразумевает наличие гетеров и сеттеров, т.е это объект, что состояние может быть изменено. ValueObject - это объект, чье состояние задается в момент его создания(как правило в конструкторе; примеры - все врапперы примитовов: Integer, Long ...) и больше не изменяется.
Бывает нужно в программе как раз использовать неизменяемый ValueObject: например, есть класс Dollar. Когда тебе надо поиметь 5 $, ты создаешь:
Dollar fiveDollars = new Dollar(5);
При этом тебе гарантировано, что fiveDollars ВСЕГДА = 5 $
...
Рейтинг: 0 / 0
Hibernate и ValueObject
    #33572936
Jozic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
М.Голованов...Во-вторых, программируя работу с некоторой таблицей, я в большинстве случаев определяю один "полный" CRUD бин и один (а иногда и несколько) "сокращенных" R бинов с нужными ("основными" в определенном контексте) полями. Эти бины "легкие", напортить в базе через них в принципе нельзя. ...А что тяжелого в обычных бинах? И что можно напортить через детачт обжект?
М.ГоловановНевыгодно. Объяснить, почему? если можно :)
...
Рейтинг: 0 / 0
Hibernate и ValueObject
    #33572986
Alexey Turn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А про EJB3 где можно почитать?
...
Рейтинг: 0 / 0
Hibernate и ValueObject
    #33573030
М.Голованов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jozic М.ГоловановНевыгодно. Объяснить, почему? если можно :)

1. Immutable classes, mutable="false", may not be updated or deleted by the application. This allows Hibernate to make some minor performance optimizations .

2. HQL возвращает не набор объектов, а набор Object[]. Чтобы удобно оперировать с полученным списком, все равно придется копировать каждый Object[] в Value Object.

В итоге и производительность не страдает, и код резко упрощается.
...
Рейтинг: 0 / 0
Hibernate и ValueObject
    #33573043
М.Голованов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JozicИ что можно напортить через детачт обжект?

С трудом врубаясь, допираю, что "детачт обжект" обозначает Hibernate entity, которая удалена из кэша первого уровня. Если так, то ничего не можно напортить по определению.
...
Рейтинг: 0 / 0
Hibernate и ValueObject
    #33573082
М.Голованов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreySerjБывает нужно в программе как раз использовать неизменяемый ValueObject

Вы верно описали разницу между ValueObject и POJO. Hibernate entity - это, конечно, не ValueObject, это ширше. Однако использование ValueObject имеет смысл только в двух случаях:

а) программист не хочет или не умеет помнить, что он делает в разных местах программы;

б) ValueObject будет использовать другой программист, и чтобы ему не объяснять, что вот у этого объекта ты, парень, set не вызывай, и определяется ValueObject.

Оба случая - защита от дурака. Как любая защита, она вызывает накладные расходы. Поскольку я не дурак и не хочу писать ненужный код, я смело использую Hibernate entities в качестве ValueObjects. Как именно и какие - я описал выше.
...
Рейтинг: 0 / 0
Hibernate и ValueObject
    #33573178
AndreySerj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
М.Голованов AndreySerjБывает нужно в программе как раз использовать неизменяемый ValueObject

Вы верно описали разницу между ValueObject и POJO. Hibernate entity - это, конечно, не ValueObject, это ширше. Однако использование ValueObject имеет смысл только в двух случаях:

а) программист не хочет или не умеет помнить, что он делает в разных местах программы;

б) ValueObject будет использовать другой программист, и чтобы ему не объяснять, что вот у этого объекта ты, парень, set не вызывай, и определяется ValueObject.

Оба случая - защита от дурака. Как любая защита, она вызывает накладные расходы. Поскольку я не дурак и не хочу писать ненужный код, я смело использую Hibernate entities в качестве ValueObjects. Как именно и какие - я описал выше.

Все верно, однако, ValueObject - это не только защита от дурака! И накладные расходы он вызывает только в случае неоходимости создания множества ункальных объектов данного типа.
Преимущества ValueObject:
- проще проектировать и использовать;
- ValueObject имеет только одно состояние, действительное всё время жизни объекта;
- менее подвержены ошибками и более надежны;
- ValueObject по своей сути thread-safe(не нужна синхронизация) - просто использовать для совместного доступа
Недостаток:
- для каждого УНИКАЛЬНОГО значения нужен отдельный объект
-
...
Рейтинг: 0 / 0
Hibernate и ValueObject
    #33573279
М.Голованов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы, видать, ЭРУДИТ. Но то, что я пишу, исходит из здравого смысла, а не из желания цитировать умные книжки.
...
Рейтинг: 0 / 0
Hibernate и ValueObject
    #33573359
AndreySerj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нда ....
А Вас бесит цитирование УМНЫХ книжек ?
Кроме того, это ответ на вопрос авторОбъясните, зачем нужно (и нужно ли) использовать ValueObject вместо самого hibernate-класса.
...
Рейтинг: 0 / 0
Hibernate и ValueObject
    #33573464
BlackWall
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вставлю свои пять копеек.
Начинал писать приложение, полагаясь исключительно на POJO-объекты модели. При этом setter-методы создавал только те, которые действительно должны быть доступны (например изменение пароля пользователя). Приложение использует связку Hibernate+Spring+WebWork. Важно то, что описание границ транзакций выполняется через Spring, поэтому все объекты, возвращенные сервисными методами, в принципе могут быть модифицированы в представлении без ущерба для приложения (т.е. без вызова commit по завершении сессии). Для того, чтобы не было проблем с Lazy-инициализацией POJO используется шаблон OpenSessionInView (http://www.jroller.com/page/kbaum?entry=orm_lazy_initialization_with_dao), тем самым нет необходимости создавать ненужные VO. Кроме того, можно установить для сервисных методов, извлекающих объекты для отчета, параметр транзакции Read-Only.
А вот теперь появилась необходимость разделения приложения на части - Web отдельно, сервисы отдельно. Опять же, задача удаленного доступа к сервисам решается с помощью Spring. Но OpenSessionInView не работает. Вот здесь я нашел такое решение - сделать несколько VO для представления (создания отчетов и пр.), при этом можно сделать две реализации VO - одна для монолитного приложения в виде, работающих как прокси над POJO модели, вторая как реальный VO для распределенного приложения. Плюс я вижу такой, что VO может иметь методы доступа к другим VO, в первом случае вызов такого метода это просто вызов метода проксируемого объекта, во втором - вызов метода какого-либо сервиса.
Короче говоря, все ограничивается Вашей фантазией.
...
Рейтинг: 0 / 0
Hibernate и ValueObject
    #33573704
М.Голованов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreySerjА Вас бесит цитирование УМНЫХ книжек ?

1. Не бесит. А к чему вопрос? Охота подковырнуть?

2. Умные книжки все читают. Цитаты неинтересны хотя бы потому, что это всем известно (или должно быть известно - нельзя быть толковым программистом, не читая литературу по программированию).

3. Цитирование, не подкрепленное личным опытом и здравым смыслом, - пустое дело. Вы повторяете чужие мысли, которые могут быть ошибочны или просто понаписаны для листажа (люди пишут книжки не в последнюю очередь, чтобы подзаработать).
...
Рейтинг: 0 / 0
Hibernate и ValueObject
    #33573839
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlackWall

imho вы просто злоупотребили lazy loading'ом, который стоит использовать только в пределах одной транзакции
...
Рейтинг: 0 / 0
Hibernate и ValueObject
    #33574110
BlackWall
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не совсем понял что Вы имеете в виду. В каком случае использование Lazy-Loading становится злоупотреблением? Использование OpenSessionInView - одно из решений проблемы отображения данных в представлении, когда объект покидает границы транзакции. Это еще и эффективно, т.к. мне нет нужны отслеживать какие данные могут понадобиться представлению и создавать еще больше ValueObject-ов. Если что-то действительно выглядит как лохая практика, я внимательно выслушаю все замечания.
...
Рейтинг: 0 / 0
Hibernate и ValueObject
    #33574494
AndreySerj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
М.Голованов Цитирование, не подкрепленное личным опытом и здравым смыслом, - пустое дело. Вы повторяете чужие мысли, которые могут быть ошибочны или просто понаписаны для листажа (люди пишут книжки не в последнюю очередь, чтобы подзаработать).
Эти чужие мысли я с успехом использую уже на протяжении долгого времени в различных проектах. Автор этих мыслей - Дж. Блох, ст. инженер Sun Microsystems.
Не вижу ничего зазорного в том, чтобы пересказать эти мысли человеку, который интересуется различием ValueObject и POJO.
...
Рейтинг: 0 / 0
Hibernate и ValueObject
    #33575097
М.Голованов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreySerjНе вижу ничего зазорного в том, чтобы пересказать эти мысли человеку, который интересуется различием ValueObject и POJO.

А не проще дать ему ссылку? Он читать умеет, сам разберется. Да и вообще, длинные цитаты без ссылок выглядят как-то нескромно.

А Дж. Блох - персона уважаемая, но любит лишние навороты. Я не говорю, что ValueObject лишнее - BlackWall привел грамотный пример, есть и другие места, где без них никак. Но если вы используете конкретно Hibernate, а также:

а) по пути от сессии до преставления или использования с данными не происходит ничего экстраординарного,

б) программист, пишущий использование данных, понимает, что это прочитанные данные,

то использование Hibernate entities вполне достаточно и нечего городить огород.
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate и ValueObject
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]