47 votes

Choisir entre NHibernate vs Entity Framework?

Quels sont les principaux avantages et inconvénients de NHibernate et de Entity Framework 4.0?

(Lors du marquage de ma question, j'ai remarqué plus de tags NHibernate que EF. NHibernate est-il plus populaire?)

21voto

Sunday Ironfoot Points 5625

J'ai eu très peu d'expérience avec EF (quelques billets de blog et tutoriels), mais beaucoup d'expérience avec NHibernate.

Microsoft est toujours derrière, où le mouvement OpenSource est, et c'est certainement le cas avec NHibernate. EF 1.0 a été publié tout d'abord, il a manqué de soutien pour les principales fonctionnalités, telles que POCO soutien et de l'ignorance de la persistance, il est nécessaire de vos classes d'entités d'étendre une entité de base de la classe d'EF, donc vos classes d'entités n'étaient pas complètement découplé de EF. Cette effectués de la maintenabilité et de l'unité de la testabilité, ainsi que la capacité de passer de l'ORM fournisseurs en cas de besoin.

NHibernate d'autre part a permis de totalement dissocier vos entités de NHibernate lui-même. EF 4.0 a rattrapé un peu dans ce sujet, c'est le Premier Code de l'approche du Développement (récemment annoncer par Scott Guthrie) est un pas dans la bonne direction.

NHibernate a lui-même certains très puissant de la cartographie des capacités comme l'Héritage de la cartographie, cartographie des classes de composants (pensez à l'Adresse de l'objet sur une entité Client), unidirectionnel entité cartographie de l'association. Il vous permet de tirer pleinement parti de la puissance de la programmation Orientée Objet (Encapsulation, Polymorphisme, Héritage, etc.) à l'intérieur de votre modèle de domaine, pensez à vos classes d'entités comme l'encapsulation de comportement et pas seulement des conteneurs de données. Si vous êtes aspirant à construire votre modèle de domaine aux principes de Domain Driven Design, puis NHibernate est un très bon ajustement pour cela. Je ne peux pas parler directement sur EF 4.0 sur ces points, seulement à partir de ce que j'ai entendu d'autres NHibernate utilisateurs essayant d'utiliser EF 4.0, mais EF 4.0 est encore à la traîne dans ces domaines, mais il est en train de gagner du terrain.

11voto

duffymo Points 188155

Je dirais que le fait que Entity Framework est à partir de Microsoft est à la fois un avantage et un inconvénient. Vous êtes l'obtention d'un cadre de droit à partir de la même source .NET lui-même. La mauvaise nouvelle, c'est que Microsoft souvent obsolètes son propre code de base, sans égard pour la rétro-compatibilité.

NHibernate ne vient pas de Microsoft, et il n'y a pas une norme autre que ce que les développeurs de mise en veille prolongée et NHibernate dire appartiennent dans leur code. La bonne nouvelle est qu'ils ont généralement payés à l'attention de la compatibilité ascendante. Il y a une grande base d'utilisateurs, parce que Hibernate a été autour pendant un certain temps.

L'une des fonctionnalités que j'aime le plus à propos de Printemps, c'est qu'ils ne prennent pas des décisions comme ça, loin de vous. Le printemps a ses propres JDBC de fonctionnalités, mais il prend en charge Hibernate, TopLink, JDO, iBatis, et JPA. Vous êtes également libre d'injecter vos propres classes, si vous décidez d'aller d'une autre manière (par exemple, NoSQL). Pourquoi votre choix sera dicté par le choix de référentiel? Il est très nounou-ish: "Nous sommes de Microsoft; nous savons ce qui est le mieux pour vous, mieux que vous."

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X