2010-04-20 5 views
5

Я начинаю новый проект, который, как я думаю, продлится несколько лет. Я хочу решить, как использовать ORM-структуру (или использовать ее вообще). Может ли кто-нибудь с опытом рассказать мне, используются ли рамки orm в приложениях realworld. Проблема, которую я имею в виду, такова: инструмент orm генерирует для меня таблицы и столбцы и т. Д., Когда я создаю и изменяю свои сущности. Тем не менее, после того, как проект выйдет вживую и находится в производстве, некоторые изменения в базе данных не будут возможны. Это может помешать продвижению проекта. Если бы я использовал фреймворк, например, ibatis, я знаю, что мне нужно будет только настроить SQL-запросы на основе изменений базы данных. Может ли кто-нибудь сказать мне, остались ли инструменты ORM в живой среде. В моем офисе мы используем java-based ERP, что было сделано давно, и это никогда не было сделано с использованием какой-либо структуры ORM.ORM in the realworld

С уважением. Josh

ответ

2

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

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

картостроители объектов как Ibatis и EclipseLink безопасные варианты, как они позволяют отображать почти все, гарантируя, что вы можете создать и большую модель предметной области и изящную конструкцию схемы. Также обратите внимание, что Spring JDBC прошел очень длинный путь (в частности, очень удобный SimpleJDBCTemplate), поэтому, хотя технически это не ORM, он позволяет вам делать все, что угодно, без написания утомительного JDBC-шаблона.

+0

Уточнить, почему структура ORM не должна быть «объектно-одержимой» и как любой Структура ORM позволяет вам «реорганизовать схему базы данных». – ireddick

+0

Хорошая ORM должна удовлетворять как администраторам баз данных, так и разработчикам приложений. Я хочу иметь как отличный дизайн базы данных, так и отличную объектную модель. Мапперы, подобные Hibernate, заставляют дизайн базы данных быть определенным образом, что я считаю очень ограниченным. –

+1

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

1

Я использовал в течение нескольких лет в производстве Hibernate + JPA. Я никогда не полагался на генерацию схемы ORM, хотя и думаю, что это плохая практика вообще, так как вы не полностью контролируете схему таким образом, и ORM не всегда будет генерировать оптимальную схему. Используя что-то вроде Liquibase для отслеживания миграции схем в гораздо лучшей идее IMO.

+1

с точки зрения домена, вам не нужно контролировать схему. На самом деле вам все равно, как именно ваша модель домена представлена ​​как реляционная схема. – Bozho

+2

Bozho, в производственной среде, вы заботитесь о том, как ваша модель домена представлена ​​как реляционная база данных. После того, как вы разместите свое приложение на производстве, вы больше не сможете вносить изменения в базу данных по своему усмотрению. В большинстве случаев кто-то другой возьмет на себя базу данных. – josh

+1

@ Божо, теория и практика редко сосуществуют мирно. У меня есть ошибки в ORM, которые приводят к созданию некорректной или не оптимальной схемы. Также есть проекты, использующие ORM, предназначенные только для конкретной БД, и клиенты настаивают на использовании всех возможных оптимизаций db - не очень, но вы знаете, что они говорят - клиент всегда прав ... –

2

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

  1. Как было предложено ранее ответами, вы можете сохранить схему вручную в базе данных и иметь ОРМ обновить схему, чтобы соответствовать тому, что он видит в базе данных.

  2. Вы можете ORM проверить схему базы данных на свою собственную информацию об объектной модели и сгенерировать необходимые запросы для обновления, если были какие-либо изменения.

По моему опыту, любой приличный ORM должен быть в состоянии справиться с # 1 и большинство, кажется, чтобы иметь возможность управлять # 2, но это не совсем так универсальна.

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

Если ваш основной интерес находится в базе данных, и вы используете ORM для предоставления OO-обертки вокруг таблиц и полей, чтобы сделать их доступными более легко, то вы, вероятно, захотите пойти с №1 и полностью контролировать базы данных.

Если, с другой стороны, вы рассматриваете объектную модель как высшую и в основном используете базу данных как немой механизм сохранения, а ORM служит для упрощения этой задачи, тогда вы, вероятно, захотите использовать # 2, так что вы можете сосредоточиться на объектной модели и не беспокоиться о деталях базы данных. Или вы можете взглянуть на хранилища ключей/значений, механизмы персистентности на основе объектов или другие формы баз данных NoSQL, чтобы получить лучшую поддержку для простой настойчивости объектов, не беспокоясь о изменениях схемы на стороне базы данных вообще.

+0

Спасибо Дэйв. У меня есть несколько комментариев. Если я изменю базу данных в соответствии с вашим вариантом, я должен обновить метаданные сопоставления - аннотации или xml. Я предпочитаю аннотации, и это будет означать перекомпиляцию и передислокацию. (изменение в версии, процесс QA и т. д.). Я бы хотел этого избежать. – josh

0

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

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