Подтвердить что ты не робот

Java Frameworks War: Spring и спящий режим

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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

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

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

Ответ 4

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

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

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

Ответ 5

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

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

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

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

Ответ 6

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

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

Ответ 7

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

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

Ответ 8

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

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

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

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

Ответ 9

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

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

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

Ответ 10

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

Что касается Spring... см. Блог Bile:)

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

Ответ 11

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

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

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

/Ace

Ответ 12

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

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

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

Ответ 13

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

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

Ответ 14

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

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

Ответ 15

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

Ответ 16

Рамки не злые. даже Java SDK является основой.

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

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

Ответ 17

@slim - Я снова с тобой сегодня утром.

Это звучит как классический случай Inv Invented Here Syndrome. Если они не заинтересованы в spring, они должны учитывать другие варианты, а не создавать собственные рамки (признают ли они это делать или нет). Guice приходит на ум как возможность. Также пикоконтейнер. Есть и другие, в зависимости от того, что вам нужно.

Ответ 18

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

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