Вопрос по llblgenpro, nhibernate – nHibernate против LLBLGen Pro

26

Я пытаюсь разработать инструмент ORM, чтобы перейти к нему и сузить его до двух кандидатов.

nHibernate или жеLLBLGen Pro

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

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

Большое спасибо, Ричард

Ваш Ответ

8   ответов
34

Я использовал оба. Сначала я был продан на nHibernate и отказался попробовать что-либо еще, хотя я знал о других вариантах.

С LLBLGen Pro я настроен скептически, но вскоре увидел и преимущества. Я не полностью отказался от Hibernate. Я буду продолжать хранить int в «ящике с инструментами». Я нашел LLBLGen полезным в некоторых случаях, особенно при взаимодействии с базой данных, которая уже существует, и у вас нет выбора для ее перепроектирования. Для генерации моих объектов сущности LLBLGen из базы данных требуется менее часа (в зависимости от размера базы данных), в отличие от необходимости кодировать все это вручную с помощью nHibernate и выполнять сопоставления. В nHibernate отсутствует красивый графический интерфейс для создания отображений. Этот факт становится еще более важным, когда база данных огромна с тысячами таблиц, к которым вам потенциально необходим доступ в вашем приложении.

Хотя LLBLGen является в большей степени генератором уровня доступа к данным (и я обычно не являюсь поклонником генераторов DAL), он обладает множеством функций, таких как «истинный ORM»; инструмент будет иметь. На мой взгляд, это лучшее из обоих миров. Как только вы начинаете работать с ним, вы начинаете понимать, что он очень гибкий и расширяемый. Одна часть, которая мне очень нравится, - это то, что я могу создавать частичные классы для сгенерированных объектов сущностей, где я могу кодировать в своей бизнес-логике, а также проверять правильность.

Генерация кода является шаблонной, поэтому у вас есть полный контроль над кодом, который он генерирует. С nHibernate я снова и снова пишу один и тот же код. С LLBLGen я могу создать его и быстрее сосредоточиться на бизнес-логике и проблемах.

Для тех, кто только начинает использовать инструменты типа ORM, я действительно рекомендую начинать с LLBLGen, потому что nHibernate может быть подавляющим. И в итоге вы добьетесь того же результата (более или менее).

Edit #1:  LLBLGen теперь также имеет 100% поддержку LINQ. (Поэтому, если вам нравится LINQ to SQL по этой причине), далее LLBLGen может поддерживать множество баз данных, где LINQ to SQL предназначен только для базы данных Microsoft SQL.

Edit #2: По словам Гравитона Вы можете использовать CodeSmith для создания кода для nHibernate. Это действительно круто, но для новичка в ORM я все равно рекомендую LLBLGen. Для меня это добавляет больше зависимостей, где LLBLGen имеет все это в одном пакете. Также, как я уже говорил, кривая обучения намного менее крутая, и вы получите те же преимущества, которые также помогут вам легко перейти на nHibernate, если вы когда-нибудь решите туда пойти.

@StampedeXV - почти наверняка простые обходные пути для этих вещей, вы упомянули их на форуме LLBLGen? По моему опыту, ошибки устраняются большую часть времени командой LLBLGen в течение нескольких дней (иногда часов) с новой сборкой.
Мы используем LLBLGen LINQ для чрезвычайно сложных вещей без проблем. Это не лучший инструмент для разработки, управляемой доменом, но если вам нравится думать о вещах с точки зрения базы данных в первую очередь, это явный победитель.
Большое спасибо, Роберто, у меня есть кое-какие занятия, чтобы сделать здесь .... Rippo
Версия 3 LLBGen теперь предназначена для NHibernate, Entity Framework и Linq to SQL.
Если вы ищете возможности генерации кода для NHibernate, вы можете посмотреть на CodeSmith; у него есть поддержка nhibernate:itscommonsensestupid.blogspot.com/2009/04/…
20

Основное различие заключается в том, что LLBLGen является генератором кода, а NHibernate является «верным». Библиотека ORM.

LLBLGen advantages:

  • Easy to use model designer. Can import your existing database schema
  • Fully typed object model and query language

LLBLGen disadvantages:

  • You need the designer application to change your model
  • Not free
  • Can bloat your code because a lot of code is generated

NHibernate advantages:

  • No designer application needed. Only code
  • Widely used (based on the most popular Java ORM, Hibernate)
  • Very powerful for mapping any data model you can imagine
  • Open source

NHibernate disadvantages:

  • Hard to learn
  • Not as strongly typed as one would like (especially queries)

Конечно, это только моя личная точка зрения ...

Филипп - не правда. LLBLGenPro - это ORM со встроенным генератором кода, а не просто генератором кода.
Так какой из них ваш любимый? Какой из них вы бы порекомендовали? Rippo
Я использовал оба, и в целом я выбрал LLBL ... в первую очередь потому, что LLBL может заставить вас работать и выполнять гораздо меньше работы / кода. Если вы можете относиться больше к таблицам базы данных, чем к абстрагированным доменным объектам, LLBL для вас.
Я бы не выбрал ни того, ни другого, но мне пришлось использовать их обоих, и я предпочитаю NHibernate, а не LLBLGen. Причина в том, что я ненавижу зависимости от внешних инструментов генерации кода, но это личное дело :)
LLBLGen не может использоваться без генератора кода, поэтому он по существу является генератором кода, даже если сгенерированный код вызывает внутреннюю библиотеку ORM
8

Я набрал довольно длинный ответ, прежде чем понял, что это довольно старый вопрос. Ну что ж. Это все еще очень актуально.

Вы сузили свой список до двух лучших кандидатов на ORM в мире .NET. У меня ограниченный опыт работы с обоими, но я много читал о плюсах и минусах обоих. Они действительно удовлетворяют несколько разные потребности по-разному.

В предстоящем выпуске LLBLGen Pro 3.0 Франс Боума рассказал о добавлении функций для создания отображений NHibernate. Таким образом, это даже не обязательно решение.

Если вы хотите сделать & quot; class first & quot; Дизайн (в отличие от «базы данных сначала»), NHibernate в настоящее время является практически вашим лучшим и единственным вариантом (ни LLBLGen Pro, ни Entity Framework не поддерживают этот режим, хотя кажется, что Entity Framework улучшает его поддержку в следующем. версия).

NHibernate и LLBLGen Pro усердно работают, чтобы хорошо работать с устаревшими базами данных, которые вы не можете изменить и с которыми приходится жить. Это их общая сила. Они оба также работают с Линком. Они оба также поддерживают некоторое графическое моделирование, хотя LLBLGen Pro намного лучше в этом отношении (ActiveWriter для NHibernate похоже на конструктор LinqToSql в Visual Studio, но на самом деле он не настолько богатый набор функций).

LLBLGen Pro обладает гораздо более сильными возможностями генерации кода, но слишком большая генерация кода может привести к нарушению тестируемости и удобства сопровождения (одна небольшая настройка может привести к повторному тестированию огромных объемов кода).

В то время как NHibernate хочет помочь вам работать с довольно сложными сценариями объектно-реляционного отображения, такими как наследование классов, LLBLGen Pro действительно просто представляет вашу базу данных как слой данных и бизнес-объекты очень быстро.

Если вы можете приобрести LLBLGen Pro и у вас будет время, я попробую оба варианта и выясню, какой из них лучше соответствует вашим потребностям. Изучение обоих ORM полезно для вашего резюме в любом случае.

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

Спасибо за ваш комментарий ... Я проголосовал за вас! Я все еще думаю об этом! Rippo
3

Я использовал nHibernate, LLBLGen Pro, пользовательский уровень данных от моей консалтинговой компании, Enterprise Library и LINQ. LLBLGen, безусловно, мой любимый, и он позволяет писать один бизнес-уровень, который может взаимодействовать с различными типами баз данных, используя один и тот же код, обеспечивая независимость базы данных! Еще одна невероятная особенность - это возможность нескольких подключений к разным базам данных. Это очень полезно, когда в большой компании одна система написана на Sql Server, а другая, с которой вам приходится взаимодействовать, находится в Oracle.

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

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

Если вы действительно хотите использовать nHibernate, начните с LLBLGen Pro и сгенерируйте код nHibernate. Если в дальнейшем ваш отдел решит перейти с nHibernate на LINQ, вы застрахованы. Хотите перейти с Sql Server на Oracle? Это возможно и относительно просто с LLBLGen, тогда как с кодом nHibernate, закодированным вручную, вы должны переписать все, что практически невозможно оправдать затратами.

Франс также был доступен и ответил на некоторые мои вопросы.

1

Мы используем LLBLGen на работе, и он оскорблен, а именно потому, что у нас есть несколько схожих схем, но вам нужно иметь разные библиотеки DLL / классов для каждой схемы, а это значит, что писать код, который может быть нацелен на любую схему, становится раздражающим.

Конечно, это необычная среда, поэтому она может к вам не относиться.

Вы можете использовать перезапись имени схемы, поэтому вы можете использовать одинаковые схемы с одной базой кода. Это можно сделать в файле конфигурации вашего приложения, а также во время выполнения через вызовы DataAccessAdapter.
2

Не забывайте один из самых больших плюсов Hibernate: HQL. С HQL ваши навыки SQL не пропадут даром. И Hibernate обеспечивает очень хорошую и плавную поддержку собственных запросов. Если у вас есть какая-то странная, нестандартная база данных, почти наверняка вам понадобится навык SQL в какой-то момент, и удачи вам в LLBL!

Как запустить собственный SQL в LLB - очень тщательно охраняемый секрет. Вперед, спросите их, как это сделать на форумах! :)
Я согласен и уважаю Hibernate. Но, пожалуйста, не сбивайте LLBL, потому что он поддерживает нативный SQL. LLBL просто отличается тем, что работает с данными. Где nHibernate - Домен Управляемый, и вы можете отодвинуть вещи базы данных намного позже в вашей разработке.
6

Новая версия LLBLGen Pro (3.0) позволяет генерировать код для NHibernate, так что вам не придется выбирать :). Это также позволяет вам разделить ваши сущности на разные домены.

Я по-прежнему предпочитаю LLBLGen pro runtime, хотя интерпретатор LINQ более полон и лучше отслеживает изменения полей.

К сожалению, в новой среде выполнения LLBLGen Pro 3.0 не так много новых функций, так как создатель сначала хотел сосредоточиться больше на инструментах, чем на улучшении существующей инфраструктуры.

Обратите внимание, что 3.1 (недавно выпущенный) включал в себя как скорость, так и улучшения управления памятью для среды выполнения LLBLGen Pro.
2

Для меня это сводится к центру базы данных (LLBLGen Pro) против модели домена (NHibernate).

Поскольку я парень DDD / OO, выбор всегда был для меня очень легким, но я понимаю, почему LLBLGen Pro популярен.

NHibernate работает как с базами данных, так и с инструментами Domain-To-Model. Исторически это всегда было Model-First, но, опять же, теперь существуют инструменты для генерации (и обновления) модели из базы данных.

Похожие вопросы