2009-03-17 3 views
1

На протяжении многих лет я написал много кода ejb, oledb и ADO. Мой опыт работы с маркерами O/R в лучшем случае - это свиньи для скорости, а в худшем - кошмар.NHibernate O/R Вопрос

Является NHibernate или весной .NET стоит проблема и почему?

ответ

1

Они стоят «проблемы», потому что они позволяют вам четко определять свои данные в модели, отделенной от поведения и другого кода. Вам не нужно писать пользовательский DAL. Они помогают с разделением проблем.

1

Это зависит от вашего внимания, я думаю.

В моем магазине некоторые люди любят их (настоящие головы пропеллера Java/OO), а некоторые люди презирают их (с большим количеством навыков SQL).

Я во второй группе, но я разработчик DBA.

Они не зло, как таковые, но просто полезный инструмент, если он используется правильно, без какого-либо религиозного багажа.

1

Если вы не против жесткой связи с SQL Server и относительно жесткой связи с схемой, вы можете рассмотреть возможность поиска в LINQ to SQL. Это часть фреймворка, довольно проста и удивительно проста в программировании. Вы можете работать с ним и программировать в течение нескольких минут, используя конструктор, который поставляется с VS 2008.

Сказанное: LINQ to SQL не является be-all-end-all; NHibernate, безусловно, более устойчив во многих отношениях, а также происходит целая миграция Entity Framework.

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

LINQ to SQL на самом деле довольно мощный и зрелый ORM.

Если вам нужен рабочий пример мощности LINQ to SQL, взгляните на этот веб-сайт. Он использует LINQ to SQL для внутреннего интерфейса, и я не думаю, что это медленный процесс.

3

Я не использовал модуль данных Spring.Net, поэтому я не буду комментировать это. Я использовал Spring.Net для своего IOC. В общем, я думаю, вы можете сделать лучше для этого.

NHibernate очень хорошо. Это будет медленнее, чем прямо ADO.Net, но в целом вам не о чем беспокоиться. Ключ в том, что NHibernate позволяет быстро и быстро обновить код базы данных, чтобы вы могли беспокоиться о фактическом коде приложения. Ваше приложение больше, чем база данных.

Затем, когда вы найдете запрос, который занимает много времени и влияет на производительность приложения, перепишите метод THAT с использованием традиционного подхода.

Есть и другие варианты, а также, Entity Framework, SubSonic, LLBLGen и т.д.

+0

«Вы - приложение больше, чем база данных». Хорошая цитата - это то, о чем многие люди типа DBA пропускают ИМО. – bernhardrusch

+0

Возможно ... но это не повод для неправильного использования или игнорирования их ... – gbn

+1

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

2

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

Если вы ищете место в .net, обратите внимание на Lightspeed.Это коммерческий ORM, но значительно быстрее, чем NHibernate, и, как правило, более интуитивно понятный для работы.

0

NHibernate определенно стоит усилий. Как говорили другие, это медленнее, чем напрямую с использованием ADO.Net и т. Д., Но увеличение производительности стоит того, о чем я думаю. Что касается производительности, есть довольно много настроек, которые можно сделать в NHibernate, чтобы ускорить вещи:

  1. Ленивая Загрузка - только нагрузка дочерние объекты/коллекции из БД, когда они на самом деле запрошенные
  2. Кэширование - NHibernate имеет кеширование 1-го и 2-го уровней. Кэш первого уровня используется по умолчанию и означает, что NHibernate не будет запускать одинаковые запросы несколько раз в течение одного сеанса. Кэш второго уровня недоступен пользователю, где вы можете выбрать, какие операции можно кэшировать (с помощью механизма кэширования третьей стороны), который NHibernate будет обрабатывать для вас. Например. если вы многократно загружаете объект (во всех сеансах), и объект изменяется редко, что делает его пригодным для кеширования для ускорения работы.
Смежные вопросы