В чем разница между 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 несколько поездок.