В чем разница между NHibernate и iBATIS.NET? - PullRequest
5 голосов
/ 29 марта 2009

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

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

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

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

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

Ответы [ 3 ]

5 голосов
/ 29 марта 2009

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

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

На некоторые интересующие вас вопросы я могу ответить:

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

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

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

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

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

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

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

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

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

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

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

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

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

3 голосов
/ 08 мая 2009

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

3 голосов
/ 29 марта 2009

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

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

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

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

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

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

Да

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

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

Какая главная особенность, которой обладает одна, которой нет у другой?

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

...