В чем разница между NHibernate и iBATIS.NET?

Я ищу некоторую актуальную информацию, сравнивающую NHibernate и iBATIS.NET. Я нашел некоторую информацию в поиске Google, но большая ее часть относится либо к Java-версиям этих продуктов, либо устарела.

Некоторые конкретные вещи, которые меня интересуют:

  • Что лучше, если вы контролируете как модель данных, так и приложение?
  • iBATIS неоднократно называют более простым в изучении - имеет ли это долгосрочные последствия для технического обслуживания (то есть, легко запустить, трудно обслуживать)?
  • Позволяют ли оба легко переключаться между поставщиками баз данных?
  • Насколько опытны ваши разработчики в работе с SQL?
  • Есть ли у кого-то важная особенность, которой нет у другого?
  • Является ли какой-либо продукт более подходящим для определенного типа применения?

Реальные примеры наблюдаемых преимуществ и недостатков приветствуются!

РЕДАКТИРОВАТЬ: Спасибо за информацию. Я тоже делаю свою оценку. Еще одна вещь, которая меня интересует, помогает ли iBATIS сохранять / обновлять графы сложных объектов? Кажется, что NHibernate хорош в том, что я могу передать ему корневой объект, и он выясняет детали того, что, если что-то, нужно обновить в базе данных.

3 ответа

Решение

Я провел некоторое исследование некоторое время назад.

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

Я могу ответить на некоторые ваши вопросы:

  • Что лучше, если вы контролируете как модель данных, так и приложение?

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

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

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

  • Позволяют ли оба легко переключаться между поставщиками баз данных?

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

  • Насколько опытны ваши разработчики в работе с SQL?

Когда вы используете iBatis, вам нужно больше навыков SQL, чем NHibernate. Используя iBatis, вам всегда нужно кодировать SQL. NHibernate не требует от вас кодирования операторов SQL - он даже может сделать DDL для вас. Мощные функции потребуют от вас перехода на старый добрый SQL, который будет неизбежен.

Некоторые другие моменты:

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

  • Можно совместить использование NHibernate и iBatis! Вы можете использовать NHibernate для своей бизнес-логики. В целях отчетности, когда вы просто считываете данные из таблиц, используйте iBatis.

  • Если ваше приложение имеет более длинный жизненный цикл и много бизнес-логики, рассмотрите NHibernate. Он имеет множество функций, помогающих вам управлять бизнес-объектами.

  • Сообщество вокруг NHibernate очень активно и предлагает полезные инструменты.

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

В некотором смысле это сравнивает яблоки с апельсинами.

Что лучше, если вы контролируете как модель данных, так и приложение?

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

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

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

Позволяют ли оба легко переключаться между поставщиками баз данных?

да

Насколько опытны ваши разработчики в работе с SQL?

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

Есть ли у кого-то важная особенность, которой нет у другого?

iBatis - это картограф данных (термин, используемый на сайте iBatis). NHibernate - это полноценный объектно-реляционный картограф. iBatis - отличный способ пойти, если вы в первую очередь хотите что-то, что убирает монотонность из сопоставления объектов с результирующими наборами. Тем не менее, это не идет полностью в попытке решить объект / несоответствие отношений. NHibernate имеет много других функций, таких как "грязное" отслеживание, кэширование на основе идентификатора / идентификационной карты, гибкий запрос, динамический sql, пакетная обработка и т. Д. NHibernate гораздо более динамичен в том, что он может делать много вещей за одну поездку в БД, что может занять iBatis несколько поездок.

Другие вопросы по тегам