Решение между NHibernate по сравнению с платформой объекта? [закрытый]

46
задан Sahat Yalkabov 20 July 2010 в 01:20
поделиться

2 ответа

У меня очень ограниченный опыт работы с EF (несколько постов в блоге и учебники), но большой опыт работы с NHibernate.

Microsoft постоянно отстает от движения OpenSource, и это определенно относится к NHibernate. Когда EF 1.0 только был выпущен, в нем отсутствовала поддержка ключевых функций, таких как поддержка POCO и невежество в персистентности, он требовал, чтобы ваши классы сущностей расширяли базовый класс сущности из EF, поэтому ваши классы сущностей не были полностью отделены от EF. Это влияло на сопровождаемость и тестируемость, а также на возможность смены поставщика ORM при необходимости.

NHibernate, с другой стороны, позволял вам полностью отделить ваши сущности от самого NHibernate. EF 4.0 в некотором роде догнал в этом отношении, его подход Code First Development (недавно объявленный Скоттом Гатри) - это шаг в правильном направлении.

Сам NHibernate обладает очень мощными возможностями отображения, такими как наследование, отображение классов компонентов (например, объект Address на объект Customer), однонаправленное отображение ассоциаций сущностей. Это позволяет вам в полной мере использовать возможности объектно-ориентированного программирования (инкапсуляция, полиморфизм, наследование и т.д.) в вашей доменной модели, рассматривая классы сущностей как инкапсулирующие поведение, а не просто контейнеры данных. Если вы стремитесь построить свою доменную модель в соответствии с принципами Domain Driven Design, то NHibernate очень хорошо подходит для этого. Я не могу говорить непосредственно о EF 4.0 по этим пунктам, только то, что я слышал от других пользователей NHibernate, пытающихся использовать EF 4.0, но EF 4.0 все еще отстает в этих областях, но набирает обороты.

21
ответ дан 26 November 2019 в 20:42
поделиться

Я бы сказал, что тот факт, что Entity Framework от Microsoft, является как преимуществом, так и недостатком. Вы получаете фреймворк прямо из того же источника, что и сам .NET. Плохая новость заключается в том, что Microsoft часто устаревает своей собственной кодовой базой, не обращая внимания на обратную совместимость.

NHibernate не принадлежит Microsoft, и нет никакого стандарта, кроме того, что, по словам разработчиков Hibernate и NHibernate, должно быть в их коде. Хорошая новость в том, что они обычно обращают внимание на обратную совместимость. Существует большая база пользователей, потому что Hibernate существует уже давно.

Одна из особенностей Spring, которые мне больше всего нравятся, - это то, что они не принимают подобных решений от вас. Spring имеет свои собственные функции JDBC, но поддерживает Hibernate, TopLink, JDO, iBatis и JPA. Вы также можете вводить свои собственные классы, если решите пойти другим путем (например, NoSQL). Почему ваш выбор должен быть продиктован выбором фреймворка? Это очень по-няньски: «Мы Microsoft; мы знаем, что для вас лучше, чем вы».

11
ответ дан 26 November 2019 в 20:42
поделиться
Другие вопросы по тегам:

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