2010-07-20 4 views
42

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

(Bien que le marquage ma question, je l'ai remarqué plus de tags que NHibernate EF. NHibernate est plus populaire?)

+1

Bonne question. Très pertinent pour beaucoup d'entre nous. Je vais regarder celui-ci pour les réponses de ceux qui ont plus d'expérience avec les deux. –

+0

Je suis un peu curieux de savoir quelles sont vos exigences et comment vous avez réduit vos choix à ces deux options par rapport à d'autres. Des réflexions sur LINQ to SQL ou iBATIS.NET? Il suffit de le jeter là: http://stackoverflow.com/questions/694552/what-is-the-difference-between-nhibernate-and-ibatis-net –

+2

Linq to SQL est un produit mort. iBatis est conçu autour des procs stockés. –

Répondre

18

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

Microsoft est constamment derrière le mouvement OpenSource, et c'est certainement le cas avec NHibernate. Lorsque EF 1.0 a été publié pour la première fois, il a manqué de support pour les fonctionnalités clés telles que le support POCO et l'ignorance de persistance, il a fallu que vos classes d'entités étendent une classe d'entité de EF, donc vos classes d'entités n'étaient pas complètement découplées. Cela a permis de maintenir la maintenabilité et la testabilité de l'unité, ainsi que la possibilité de changer de fournisseur ORM en cas de besoin. D'autre part, NHibernate vous a permis de découpler complètement vos entités de NHibernate elle-même. EF 4.0 a rattrapé quelque peu à cet égard, son approche Code First Development (recently announce by Scott Guthrie) est un pas dans la bonne direction. NHibernate possède lui-même des capacités de mappage très puissantes telles que le mappage d'héritage, le mappage de classes de composants (objet Address sur une entité Customer), le mappage d'association d'entité unidirectionnelle. 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 comportement d'encapsulation et pas seulement aux conteneurs de données. Si vous aspirez à construire votre modèle de domaine selon les principes de Domain Driven Design, alors NHibernate est un très bon ajustement pour cela. Je ne peux pas parler directement sur EF 4.0 sur ces points, seulement d'après ce que j'entends d'autres utilisateurs de NHibernate essayant d'utiliser EF 4.0, mais EF 4.0 est toujours à la traîne dans ces domaines, mais il gagne du terrain.

10

Je dirais que le fait que Entity Framework est de Microsoft est à la fois un avantage et un désavantage. Vous obtenez un framework directement à partir de la même source que .NET. Les mauvaises nouvelles sont que Microsoft obsolète souvent sa propre base de code sans tenir compte de la rétrocompatibilité. NHibernate ne vient pas de Microsoft, et il n'y a pas d'autre standard que ce que les développeurs d'Hibernate et NHibernate disent appartenir à leur code. Les bonnes nouvelles sont qu'ils ont généralement fait attention à la rétrocompatibilité. Il y a une grande base d'utilisateurs, car Hibernate existe depuis longtemps.

L'une des caractéristiques que je préfère chez Spring, c'est qu'elles ne prennent pas de telles décisions loin de vous. Spring a ses propres fonctionnalités JDBC, 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'opter pour une autre méthode (par exemple, NoSQL). Pourquoi vos choix devraient-ils être dictés par le choix du cadre? C'est très nounou: "Nous sommes Microsoft, nous savons ce qui est mieux pour vous que vous."

+0

Merci de le préciser d'un point de vue complètement non technique. NHibernate semble être un bon match avec ASP.NET MVC, étant donné que les deux produits sont très open-source. –

+13

Celui qui vous a dit que EF 4 nécessite une réécriture n'a pas réellement essayé. Je viens de mettre à jour un grand projet EF 1 vers .NET 4 (donc pas seulement les changements EF, mais les installateurs, FxCop, etc.) en moins d'une journée. Pour une raison quelconque, l'expérience réelle avec le FE ne semble pas être une condition préalable pour exprimer ses opinions à ce sujet. –

+1

Je l'ai eu d'un collègue que je pensais être bien informé. Peut-être ai-je mal compris. Je vais éditer la réponse. – duffymo