Вопрос

Мои разработчики ведут гражданскую войну.В одном лагере они приняли Hibernate и Spring.В другом лагере они осудили фреймворки, хотя рассматривают Hibernate.

Вопрос в том:Есть ли какие-нибудь неприятные сюрпризы, слабости или подводные камни, на которые могут наткнуться новички, обратившиеся в Hibernate-Spring?


ПС:У нас есть не очень сложная библиотека DAO.Я сомневаюсь, что он обладает богатством Hibernate, но он достигает некоторой зрелости (т.он не менялся в последних нескольких включенных проектах).

Это было полезно?

Решение

Раньше я использовал Hibernate несколько раз.Каждый раз я сталкивался с крайними случаями, когда определение синтаксиса сводилось к поиску мусора в документации, Google и старых версиях.Это мощный инструмент, но плохо документированный (последний раз, когда я смотрел).

Что касается Spring, то почти каждая вакансия, на которую я проходил собеседование или которую я просматривал за последние несколько лет, была связана с Spring, он действительно стал стандартом де-факто для Java/Web.Его использование поможет вашим разработчикам стать более востребованными на рынке в будущем, а также поможет вам, поскольку у вас будет большой круг людей, которые поймут ваше приложение.

Написание собственной структуры — это заманчиво, познавательно и весело.Не очень хорошие результаты.

Другие советы

Они осудили рамки?

Это безумие.Если вы не используете готовый фреймворк, вы создаете свой собственный.Это все еще рамки.

Конечно, у Hibernate есть свои особенности, но это потому, что проблема, которую он пытается решить, сложна.Каждый раз, когда кто-то жалуется на Hibernate, я напоминаю им обо всем скучном коде DAO, который им пришлось бы поддерживать, если бы они его не использовали.

Несколько советов:

  • Hibernate не заменяет хороший дизайн базы данных.Схемы Hibernate в порядке, но вам придется время от времени их настраивать.
  • Со временем вам придется понять, как Hibernate загружает классы в режиме ленивой загрузки и как это влияет на ситуацию.Hibernate изменяет байт-код Java, и вам рано или поздно придется копаться в его глубинах, хотя бы для того, чтобы объяснить, почему ссылки на объекты являются нулевыми.
  • Используйте аннотации, если можете.
  • Потратьте время на изучение методов настройки производительности Hibernate, это спасет вас в долгосрочной перспективе.

Если у вас довольно сложная база данных, Hibernate может вам не подойти.На работе у нас довольно сложная база данных с большим количеством данных, и Hibernate нам не очень подходит.Вместо этого мы начали использовать iBATIS.Тем не менее, я знаю множество разработчиков, которые успешно используют Hibernate — и он делает за вас большую тяжелую работу — так что об этом стоит подумать.

Spring — хороший инструмент, если вы знаете, как его правильно использовать.

Я бы сказал, что фреймворки - это определенно хорошая вещь: как отмечали другие, не нужно изобретать велосипед.Spring содержит множество модулей, что означает, что вам не придется писать так много кода.Не поддавайтесь синдрому «Изобретено не здесь»!

Отложенная загрузка — большая проблема в приложениях MVC, которые используют Hibernate для своей структуры персистентности.Вы загружаете объект в контроллер и передаете его в представление JSP.Некоторые или все члены класса проксируются, и все рушится, потому что сеанс Hibernate был закрыт после завершения работы контроллера.

Вам нужно будет прочитать Открыть сеанс в представлении статью, чтобы понять проблему и получить решение.Если вы используете Spring, это статья в блоге описывает решение Spring для проблемы открытого сеанса просмотра.

Это одна вещь (я мог вспомнить), с которой я столкнулся, когда находился в спящем режиме.Когда вы удаляете (несколько) дочерних объектов из коллекции (в родительском объекте), а затем добавляете новые объекты в ту же коллекцию в одной транзакции без очистки в середине, Hibernate выполнит «вставку» перед «удалением».Если дочерняя таблица имеет ограничение уникальности в одном из своих столбцов, и вы ожидаете, что не нарушите его, поскольку уже удалили некоторые данные раньше (как и я), то будьте готовы разочароваться.Форум Hibernate предлагает:

  1. Это был недостаток дизайна БД, редизайн;
  2. очистить (или зафиксировать, если хотите) между удалениями и вставками;

Я не мог сделать и то, и другое, и в конечном итоге мне пришлось изменить исходный код Hibernate и перекомпилировать его.Это была всего лишь 1 строка кода.Но усилия найти эту одну строчку равнялись примерно 27 чашкам кофе и 3 бессонным ночам.

Это всего лишь один пример проблем и странностей, с которыми вы можете столкнуться при использовании Hibernate без настоящего эксперта в вашей команде (эксперт:кто-то с адекватными знаниями о философии и внутренней работе Hibernate).Ваша проблема, решение, литр кофе и количество бессонных ночей могут отличаться.Но Вы получаете идею.

Я мало работал с Java, но работал в больших группах Java-разработчиков.У меня сложилось впечатление, что весна — это нормально.Но в Hibernate все были расстроены.Половина команды, если бы спросили: «Если бы вы могли изменить одну вещь, что бы вы изменили?» И они сказали бы: «Избавься от спячки».Когда я начал изучать Hibernate, он показался мне удивительно сложным, но я не узнал достаточно (к счастью, я продвинулся вперед), чтобы понять, оправдана ли сложность или нет (возможно, она необходима для решения некоторых сложных проблем).

Команда избавилась от Spring в пользу Guice, но это было скорее политическим изменением, по крайней мере, с моей точки зрения и точки зрения других разработчиков, с которыми я разговаривал.

Я всегда считал Hibernate немного сложным и трудным для изучения.Но JPA (Java Persistence API) и EJB (Enterprise Java Beans) 3.0 существует уже некоторое время, и все стало намного проще, я предпочитаю аннотировать свои классы для создания сопоставлений через JavaDoc или XML.Проверьте поддержка в спящем режиме.Дополнительным бонусом является то, что при необходимости можно (но не без усилий) изменить структуру базы данных позже.я использовал OpenJPA с отличными результатами.

В последнее время я использую JCR (Репозиторий содержимого Java) все больше и больше.Мне нравится, что мои модули могут использовать одно хранилище данных и что я могу позволить структуре и свойствам развиваться.Мне гораздо проще работать с узлами и свойствами, чем сопоставлять объекты с базой данных.Хорошая реализация — это Заяц.

Что касается Spring, то у него много функций, которые мне нравятся, но объем XML, необходимый для настройки, означает, что я никогда не буду его использовать.Вместо этого я использую Гуис и мне это очень нравится.

В заключение я хотел бы показать вашим сомневающимся разработчикам, как Hibernate облегчит им жизнь.Что касается Spring, я бы серьезно проверил, является ли Guice жизнеспособной альтернативой, а затем попытался показать, как Spring/Guice делает разработку лучше и проще.

Я много занимался разработкой Spring/Hibernate.Со временем то, как люди использовали оба этих понятия в сочетании, немного изменилось.Исходный подход HibernateTemplate оказался трудным для отладки, поскольку он поглощает и оборачивает полезные в других отношениях исключения;поговорите с API Hiberante напрямую!

Продолжайте просматривать сгенерированный SQL (настройте журнал разработки для отображения SQL).Наличие уровня абстракции в базе данных не означает, что вам больше не нужно думать на SQL;в противном случае вы не получите хорошей производительности.

Рассмотрим проект.Я предпочитал iBatis вместо Hibernate несколько раз, когда у нас были строгие требования к производительности, сложные устаревшие схемы или хорошие администраторы баз данных, способные писать отличный SQL.

Что касается спящего режима:очень хороший инструмент для приложения, которое работает с быстро меняющейся схемой базы данных, большим количеством таблиц и выполняет множество простых операций CRUD.Отчеты со сложными запросами обрабатываются гораздо хуже.Но в этом случае я предпочитаю смешивать JDBC или собственные запросы.Итак, краткий ответ:Я действительно считаю, что время, потраченное на изучение Hibernate, является хорошей инвестицией (они говорят, что он также соответствует стандартам EJB3.0 и JPA, но это не учитывалось, когда я оценивал его для личного использования).

Что касается весны...видеть Блог Желчи :)

Помнить:рамки не являются серебряные пули, но вам не следует изобретать велосипед или.

Я считаю, что использование известных фреймворков, таких как Hibernate, действительно помогает, потому что они вписывают ваш код в конкретную форму или образ мышления.Это означает, что, поскольку вы используете Hibernate, вы пишете код определенным образом, и большинство, если не все, разработчики, знающие Hibernate, смогут довольно легко следовать вашему образу мышления.

Конечно, в этом есть обратная сторона.Прежде чем вы станете успешным разработчиком Hibernate, вы обнаружите, что пытаетесь вписать квадрат в круглое отверстие.Вы ЗНАЕТЕ, что хотите сделать и как вы должны были это делать до того, как появился Hibernate, но поиск способа сделать это в Hibernate может занять...совсем немного времени.

Тем не менее, для компаний, которые часто нанимают консультантов (которым необходимо понять много исходного кода за короткий промежуток времени), или где разработчики часто подписывают контракт и уходят, или где вы просто не хотите делать ставку на то, что ваши ключевые разработчики будут оставайтесь навсегда и никогда не меняйте работу. Я считаю, что Hibernate и другие стандартные среды — довольно хорошая идея.

/Туз

Spring и Hibernate — это фреймворки, которые сложно освоить.Возможно, не стоит использовать их в проектах с жесткими сроками, пока вы все еще пытаетесь разобраться в инфраструктуре.

Преимущества фреймворков в основном заключаются в том, что они пытаются предоставить платформу, позволяющую использовать согласованные коды в качестве продуктов.Исходя из опыта, вам рекомендуется привлечь разработчиков, имеющих опыт работы с платформами, и внедрить лучшие практики.

В зависимости от конструкции вашего приложения и/или базы данных существуют также особенности, которые вам придется обойти, чтобы гарантировать, что платформы не снижают производительность.

По моему мнению, самое большое преимущество Spring заключается в том, что он поощряет и обеспечивает лучшие методы разработки, в частности слабое связывание, тестирование и дополнительные интерфейсы.Спящий режим без Spring может быть очень болезненным, но вместе они очень полезны.

Модернизация существующего проекта под любую структуру будет болезненной, но процесс рефакторинга часто имеет серьезные преимущества для долгосрочной удобства сопровождения.

Я должен согласиться со многими сообщениями по этому поводу.Я широко использовал оба варианта в различных условиях.Если бы я мог отменить дизайнерское решение, я бы использовал Hibernate.Фактически мы запланировали выпуск одного из наших продуктов, чтобы заменить Hibernate на iBatis и Spring-JDBC для лучшего в мире подхода.Я могу помочь новому разработчику освоиться с использованием Spring-JDBC, Spring-MVC, Spring-Ioc и iBatis быстрее, чем если бы я просто поручил ему использовать Hibernate.

Hibernate слишком сложен для этого разработчика KISS.И небеса помогут вам перейти в спящий режим, если ваш администратор базы данных увидит сгенерированный SQL, который видит база данных, и отправит вам обратно с оптимизированными версиями.

В верхнем ответе упоминается, что Hibernate плохо документирован.Я согласен, что онлайн-справочное руководство могло бы быть более полным.Однако книга, написанная авторами Hibernate,Сохранение Java с Hibernate» является обязательным к прочтению каждым пользователем Hibernate и очень полным.

@slim - Этим утром я снова с тобой.

Это звучит как классический случай Синдром, изобретенный не здесь.Если им не нравится Spring, им следует рассмотреть другие варианты, а не создавать собственную структуру (независимо от того, признают они это или нет). Гуис приходит на ум как возможность.Также пикоконтейнер.Есть и другие, в зависимости от того, что вам нужно.

Spring и Hibernate определенно облегчают жизнь.Начало работы с ними поначалу может занять немного времени, но позже вы наверняка получите от этого пользу.Теперь XML заменяется аннотациями, вам также не нужно набирать сотни строк XML.

Возможно, вы захотите рассмотреть AppFuse чтобы сократить время обучения:создайте приложение, изучите и адаптируйте его, и вперед.

Фреймворки – это не зло.даже Java SDK является фреймворком.

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

Если вы боретесь с кодом, который сложно отладить из-за несогласованного использования базы данных, сложных механизмов кэширования или множества других причин.Hibernate добавит большую ценность.Помимо обучения (которое у меня заняло около 1 месяца практической работы), не было никаких подводных камней, при условии, что рядом есть кто-то, кто объяснит вам основы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top