2009-08-14 3 views

ответ

11

Поскольку другие госзакупках перечислил преимущества, я просто перечислить недостатки


Недостатки

  1. Повышенные время запуска из-за подготовки метаданных (не подходит для настольных приложений)
  2. Огромная кривая обучения без orm фона.
  3. Сравнительно Трудно настроить мелодию сгенерированного sql.
  4. Трудно получить управление сеансом, если оно используется в нестандартных средах (чтение не-webapps)
  5. Не подходит для приложений без чистой объектной модели домена (не все приложения в мире не нуждаются в чистых объектных моделях домена).
  6. Нужно прыгать через обручи, если у вас плохо разработанная (устаревшая) схема db.
+3

Я выделяю огромную кривую обучения как единственную самую большую причину не использовать NHibernate в проекте. Для всех их недостатков инструменты, такие как LINQ to Sql, значительно облегчают работу, чем NHibernate. Тем не менее, я бы предпочел использовать NHibernate в проекте, чем любой другой ORM, благодаря своей невероятной гибкости. –

+0

Как раз в пункте 3, NHibernate позволяет запускать прямые SQL или хранимые процедуры и поможет перевести результаты в вашу модель, когда вам действительно нужно беспокоиться о используемом SQL. –

+1

@ Garry N + 1 выбирает, и его двоюродный брат над нетерпеливой выборкой является проклятием большинства проектов nhinbernate. Использование прямого sql приведет к поражению цели ORM – Surya

1

Преимущества:

  1. Кэширование
  2. Простота в коде
  3. Силовые
  4. Гибкость
  5. Multi-Поддержка баз данных

Недостатки:

  1. Остановки вы, чтобы писать свой собственный код упорство
  2. Может уменьшить ваши знания SQL

Applications вы должны использовать его для:

  • Любые, которые используют базу данных

A few more specific reasons to like NHibernate

+1

Я не понимаю, почему «Останавливает вас, чтобы написать собственный код настойчивости» является недостатком. – NerdFury

+0

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

+0

Я бы добавил: Любые, которые используют базу данных - ', но не используют ее только для обработки данных: загрузка тысяч строк в памяти' – sirrocco

0

Ответ на высокий уровень состоит в том, что NHibernate находится в классе сам по себе и не существует конкуренции.

Если вам нужно CRUD к базе данных из приложения .NET, вы должны использовать NHibernate, по крайней мере по двум причинам:

1) Вы получаете поддержку Linq (который требует что-то вроде ОРМ)

2) NHibernate очень зрелый

Нет существенных недостатков. Существуют и другие варианты, но эти другие варианты имеют существенные недостатки.

Я написал несколько подробнее об этом некоторое время назад:

.NET and ORM - Decisions, decisions

0

Недостатки: NHibernate не является продуктом Microsoft и, следовательно, столкнется с некоторым сопротивлением со стороны коллег, которые не слышали об этом. Особенно FOSS фанатиков. Конфигурирование файлов сопоставления и ленивое/нетерпеливое поведение загрузки могут занять много времени. Если ваша база данных имеет странное соглашение об именах, нетипичный дизайн или очень строгие требования к производительности, может потребоваться больше работы, чем ожидалось.

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

3

Преимущество:

  • с открытым исходным кодом
  • на основе широко утвержденные модели
  • NH не кодогенератор :)

Недостатки:

  • полуготовности поддержка LINQ
  • Низкая производительность

(смотри, например, производительность и тесты LINQ на ormbattle.net)

+1

Говоря технически, генератор кода NH IS - он считывает метаданные и генерирует прокси-классы с использованием LinFu или Castle DynamicProxy. Поддержка LINQ в Linq2Nhibernate, по-видимому, заполнена до тех пор, пока API-интерфейсы Criteria не позволяют идти, поэтому да, это более ограниченный, чем HQL, но все еще очень мощный и достаточно для большинства ситуаций. Полностью не согласен с представлением. – Ray

+1

Согласитесь, что это генератор кода времени выполнения, но не время разработки. Мне лично не нравятся инструменты, которые генерируют тонны кода во время разработки. Так что это преимущество NH. Что касается LINQ, нет сомнений, что они только в начале пути. –

+2

Эти тесты неверны. См. Здесь http://ayende.com/Blog/archive/2009/08/15/benchmarks-are-useless-yes-again.aspx – Ray

5

Преимущества:

  1. Гибкие и очень мощные возможности картографирования.
  2. Кэширование.
  3. Очень полированная реализация UnitOfWork.
  4. Запрос на будущее (article).
  5. Модельные классы POCO - это эффективно означает, что вы можете легко реализовать антимикробные средства для анемичного домена.
  6. Перехватчики - вы можете сделать своеобразное аспектно-ориентированное программирование ... Как очень легко реализовать прослушивание, протоколирование, авторизацию, проверку и т. Д. Для вашего домена.
  7. Lucene.NET и NHibernate хорошо интегрированы друг с другом - дает вам очень быструю и эффективную реализацию полнотекстового индексирования.
  8. Это очень зрелый и популярный в корпоративной среде.
  9. Большое сообщество.

Недостатки:

  1. Уже упоминавшийся кривой обучения. Вы можете очень быстро начать использовать NHibernate, но для его освоения вам потребуются месяцы. Я очень рекомендую прочитать книгу Manning NHibernate.

  2. Запись отображение XML может быть очень утомительным, особенно для больших баз данных с сотнями и тысячами таблиц и представлений и хранимых процедур.Да, есть инструменты, которые помогут вам генерировать эти сопоставления, но вам все равно придется делать немало ручной работы. Fluent NHibernate, похоже, упрощают этот процесс, избавляясь от сопоставлений XML, так что Castle ActiveRecord (AR, хотя невозможно использовать для анемичного домена, когда вы определяете сопоставления в атрибутах ваших классов моделей).

  3. Производительность может быть низкой для определенных сцен. Например, крупномасштабные операции. Для тех, кому вы, возможно, придется использовать IStatelessSession, но ее неудобный опыт, по крайней мере, сказать ...

+0

Для создания XML-сопоставлений , по крайней мере, рассмотрим Active Writer: http://using.castleproject.org/display/Contrib/ActiveWriter –