web-dev-qa-db-fra.com

Décider entre NHibernate vs Entity Framework?

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

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

48
Sahat Yalkabov

J'ai eu une expérience très limitée avec EF (quelques articles 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 manquait de prise en charge de fonctionnalités clés telles que la prise en charge de POCO et l'ignorance de la persistance, il fallait que vos classes d'entité étendent une classe d'entité de base d'EF, de sorte que vos classes d'entité n'étaient pas complètement dissociées d'EF. Cela a eu une incidence sur la maintenabilité et la testabilité des unités, ainsi que sur la possibilité de changer de fournisseur d'ORM si nécessaire.

NHibernate d'autre part vous a permis de découpler complètement vos entités de NHibernate lui-même. EF 4.0 a quelque peu rattrapé à cet égard, son approche Code First Development ( récemment annoncée par Scott Guthrie ) est un pas dans la bonne direction.

NHibernate lui-même possède des capacités de mappage très puissantes telles que le mappage d'héritage, le mappage des classes de composants (pensez à l'objet Address sur une entité Client), 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, considérez vos classes d'entités comme un comportement d'encapsulation et pas seulement des 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 choix pour cela. Je ne peux pas parler directement d'EF 4.0 sur ces points, uniquement 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.

21
Sunday Ironfoot

Je dirais que le fait que Entity Framework soit de Microsoft est à la fois un avantage et un inconvénient. Vous obtenez un framework directement à partir de la même source que .NET lui-même. La mauvaise nouvelle est que Microsoft obsolète souvent sa propre base de code sans égard à la compatibilité descendante.

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 dans leur code. La bonne nouvelle est qu'ils ont généralement prêté attention à la compatibilité descendante. Il y a une grande base d'utilisateurs, car Hibernate existe depuis un certain temps.

L'une des caractéristiques que j'aime le plus chez Spring, c'est qu'ils 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'aller dans un autre sens (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 mieux que vous ce qui vous convient le mieux."

11
duffymo