Décider entre NHibernate vs Entity Framework?

entity-framework nhibernate orm

Question

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

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

Réponse acceptée

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

Microsoft est toujours en retard sur le mouvement OpenSource, et c'est certainement le cas avec NHibernate. Lorsque EF 1.0 a été lancé, il ne prenait pas en charge les fonctionnalités clés telles que le support POCO et l'ignorance de la persistance, vos classes d'entités devaient étendre une classe d'entité de base à partir de EF. Elles n'étaient donc pas complètement découplées de EF. Cela a eu des conséquences sur la maintenabilité et la testabilité des unités, ainsi que sur la possibilité de changer de fournisseur ORM si nécessaire.

En revanche, NHibernate vous a permis de dissocier complètement vos entités de NHibernate. EF 4.0 a quelque peu rattrapé son retard à 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 dispose de capacités de mappage très puissantes telles que le mappage d'héritage, le mappage de classes de composants (objet think think sur une entité client), le mappage d'association d'entités unidirectionnelle. Il vous permet de tirer pleinement parti de la puissance de la programmation orientée objet (encapsulation, polymorphisme, héritage, etc.) au sein de votre modèle de domaine. Pensez à vos classes d'entité 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 la conception dirigée par le domaine , alors NHibernate est un très bon choix pour cela. Je ne peux pas parler directement de EF 4.0 sur ces points, mais seulement de ce que d’autres utilisateurs de NHibernate essaient d’utiliser EF 4.0, mais EF 4.0 est toujours à la traîne dans ces domaines, mais il gagne du terrain.


Réponse populaire

Je dirais que le fait que Entity Framework soit de Microsoft est à la fois un avantage et un inconvénient. Vous obtenez un cadre directement à partir de la même source que .NET. La mauvaise nouvelle est que Microsoft obsolète souvent sa propre base de code sans se soucier de la compatibilité avec les versions antérieures.

NHibernate ne provient pas de Microsoft et il n'existe aucune norme autre que ce que les développeurs d'Hibernate et de NHibernate disent appartenir à leur code. La bonne nouvelle est qu'ils ont généralement prêté attention à la compatibilité ascendante. La base d'utilisateurs est importante, car Hibernate existe depuis un certain temps.

Une des caractéristiques que j’aime le plus à propos de Spring est qu’ils ne vous prennent pas de telles décisions. Spring possède 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 de changer de méthode (par exemple, NoSQL). Pourquoi vos choix devraient-ils être dictés par le choix du cadre? C'est très nounou-ish: "Nous sommes Microsoft; nous savons ce qui est le mieux pour toi mieux que toi."



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow