Какие существуют причины для использования NHibernate? - PullRequest
0 голосов
/ 27 августа 2009

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

Ответы [ 6 ]

8 голосов
/ 27 августа 2009

Производительность и переносимость между базами данных - две причины. Hibernate / NHibernate или другие ORM позволяют легко сериализовать объекты в / из базы данных без необходимости вручную кодировать (и поддерживать) множество операторов SQL, чтобы сделать именно это. Я не знаю как вы, но написание и поддержание в актуальном состоянии множества запросов CRUD для сотен объектов в нашей системе - это не мое представление о веселье и не хорошее использование времени разработчика! Я не уверен, что у NHibernate есть подобный механизм, но плагин Hibernate Synchronizer для Eclipse действительно фантастичен: взять файл сопоставления и автоматически создавать объекты и DAO. Хорошие вещи!

Производительность (в кэшах L1 и L2) - это еще одна причина - хотя, конечно, вы, конечно, можете написать код типа findAll () с головой в голове, который делает это спорным, но в целом они вложили в это МНОГО времени и усилий, так что это больше кода, который вам не нужно заново изобретать.

Теперь, конечно, есть кривая нетривиального обучения для N / Hibernate, но, как и большинство вещей, когда вы его получите, вы удивитесь, как вы жили без него.

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

2 голосов
/ 27 августа 2009

Этот вопрос , вероятно, поможет вам, есть гораздо больше вопросов, связанных с ORM, уже по SO, , которые в значительной степени охватывают NHibernate , поскольку это "выбор людей 'вместе с Subsonic и Linq-To-Sql.

Короче говоря:

  • Очень зрелый
  • Поддерживает почти все РСУБД
  • У него большое сообщество и много разработчиков на проекте
  • Имеет мощный запрос. Если вы используете HQL для коллекций, вы не захотите возвращаться в объединения
  • Имеет очень хороший уровень определения объекта, особенно для коллекций

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

1 голос
/ 29 августа 2009

Одной из причин использования NHibernate, которая не была упомянута до сих пор, является то, что использование NHibernate позволяет вам использовать Linq. Большинство людей согласны с тем, что Linq великолепен.

Вы не можете использовать Linq без слоя данных, который поддерживает Linq и который обычно требует ORM. Если вы собираетесь использовать ORM, чтобы использовать Linq, NHibernate - лучший выбор.

Написание SQL от руки - это хорошо, но обычно это гораздо более утомительно, чем использование ORM. Просто не имеет смысла писать SQL для операций CRUD, когда вы, вероятно, собираетесь дублировать некоторые из этих «конструкций» в вашей базе данных, уровне данных и бизнес-уровне.

Как только вы решите, что не хотите писать еще один набор CRUD SQL, вы начинаете рассматривать ORM. Как только вы начнете рассматривать ORM, вы, скорее всего, в конечном итоге выберете NHibernate.

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

0 голосов
/ 02 сентября 2012

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

Изменения вносятся постоянно. Код трудно читать и понимать. Там нет визуального дизайнер. Весь процесс кажется довольно сложным или посторонним.

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

nHibernate не был разработан профессиональными инженерами.

0 голосов
/ 27 августа 2009

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

«Легче» - это субъективное слово. Вы хотите сказать, что создание приложения с планируемым SQL-кодом занимает меньше времени? Это может быть правдой для вашего приложения. Конечно. По моему опыту, код все еще грязный долгое время после того, как он был быстрым.

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

Правда в том, что все зависит. Ни один разработчик не должен жениться на инструменте. NHibernate - это инструмент. Я бы сказал, что NHibernate действительно хороший инструмент для тех, кто нуждается в ORM. Но это становится менее полезным, когда вам действительно нужен только встроенный sql.

Если вы создаете футболку ... вам, вероятно, не нужен молоток.

0 голосов
/ 27 августа 2009

Что вы подразумеваете под проще? Предположим, что стандартная заявка -> Позиция -> Настройка продукта. Если я хочу найти все заказы с позицией для продукта, я могу написать это на HQL: выберите заказ из заказа, LineItem lineItem, продукт продукта где product.id =: id и product.id = lineItem.product.id и lineItem член order.lineItems

SQL для этого гораздо сложнее. Особенно, если у вас есть несколько сводных таблиц в миксе и т. Д. Хек код SQL только для фразы «member» стоит избегать. Так что проще в настройке SQL, да в основном. SQL легче писать? Не для какой-либо существенной объектной модели. Итак, что вы подразумеваете под проще?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...