web-dev-qa-db-ja.com

NHibernateとEntity Frameworkを決定しますか?

NHibernateとEntity Framework 4.0の主な長所と短所は何ですか?

(質問にタグ付けしている間、EFよりNHibernateタグの方が多いことに気づきました。NHibernateはより人気がありますか?)

45
Sahat Yalkabov

私はEF(いくつかのブログ投稿とチュートリアル)で非常に限られた経験しかありませんでしたが、NHibernateでの十分な経験がありました。

マイクロソフトは、OpenSourceの動きの背後に一貫して存在しており、これは間違いなくNHibernateの場合です。 EF 1.0が最初にリリースされたとき、POCOサポートや永続性無知などの主要な機能のサポートが欠けていたため、エンティティクラスにEFからベースエンティティクラスを拡張する必要があったため、エンティティクラスはEFから完全に切り離されていませんでした。これにより、保守性と単体テスト性に加えて、必要に応じてORMプロバイダーを切り替えることができました。

一方、NHibernateを使用すると、エンティティをNHibernate自体から完全に切り離すことができました。 EF 4.0はこの点でやや追いついています。コードファースト開発アプローチ( スコットガスリーによる最近の発表 )は正しい方向への一歩です。

NHibernate自体には、継承マッピング、コンポーネントクラスのマッピング(顧客エンティティのアドレスオブジェクトを考える)、単方向エンティティ関連付けマッピングなど、非常に強力なマッピング機能があります。ドメインモデル内のオブジェクト指向プログラミング(カプセル化、ポリモーフィズム、継承など)のパワーを最大限に活用し、エンティティクラスをデータコンテナーだけでなくカプセル化動作と考えることもできます。 Domain Driven Design の原則に従ってドメインモデルを構築したい場合、NHibernateはこれに非常に適しています。私は、EF 4.0を使用しようとしている他のNHibernateユーザーから聞いた話からのみ、これらの点でEF 4.0に直接話すことはできませんが、EF 4.0はまだこれらの分野で遅れていますが、それは着実になっています。

21
Sunday Ironfoot

Entity Frameworkがマイクロソフトのものであるという事実は、長所でもあり短所でもあります。 .NET自体と同じソースからフレームワークを取得しています。悪いニュースは、Microsoftが後方互換性を考慮せずに独自のコードベースをしばしば廃止することです。

NHibernateはMicrosoftから来たものではなく、HibernateとNHibernateの開発者が彼らのコードに属していると言うもの以外の標準はありません。良いニュースは、一般に後方互換性に注意を払っていることです。 Hibernateはしばらく前から存在しているため、大規模なユーザーベースがあります。

私がSpringで一番気に入っている機能の1つは、このような決定をあなたから奪わないことです。 Springには独自のJDBC機能がありますが、Hibernate、TopLink、JDO、iBatis、およびJPAをサポートしています。別の方法(NoSQLなど)を選択した場合、独自のクラスを自由に挿入することもできます。フレームワークの選択によって選択が決定されるのはなぜですか? 「私たちはマイクロソフトです。私たちはあなたよりもあなたにとって何が一番良いかを知っています。」

11
duffymo