Quels sont les avantages / inconvénients de l'utilisation de NHibernate? Quel type d'applications devrait être (& ne devrait pas être) intégrée à l'aide de NHibernate? P>
6 Réponses :
Avantages: P>
Inconvénients: P>
Applications Vous devez l'utiliser pour: p>
Quelques-uns autres Raisons spécifiques à aimer NHibernate P>
Je ne comprends pas pourquoi "arrête de devoir écrire votre propre code de persistance" est un inconvénient.
Certaines personnes aiment avoir à écrire plus de code que nécessaire. C'était un peu de langue dans la joue.
J'ajouterais: tout ce qui utilise une base de données - mais ne l'utilise pas juste pour la manipulation de données: charger des milliers de lignes en mémoire code>
Comment peut-il réduire la connaissance de SQL? Ne pas avoir à écrire votre propre code de persistance semble plus comme un avantage pour moi ... pourquoi voudriez-vous réinventer la roue quand même? De loin, de loin, toutes les applications utilisées doivent être consultées par NHibernate ...
La réponse de haut niveau est que NHibernate est dans une classe par elle-même et il n'y a pas de concurrence proche. P>
Si vous avez besoin de CRUD sur une base de données à partir d'une application .NET, vous devez utiliser NHibernate, pour au moins deux raisons: P>
1) Vous obtenez un support LINQ (ce qui nécessite quelque chose comme un orm) p>
2) NHibernate est très mature p>
Il n'y a pas d'inconvénients significatifs. Il existe d'autres options, mais ces autres options ont des inconvénients importants. P>
J'en ai écrit d'autres il y a un moment: p>
Étant donné que d'autres PPL ont répertorié des avantages, je vais simplement énumérer les inconvénients p>
Inconvénients P>
Je souligne l'immense courbe d'apprentissage comme la principale raison de ne pas utiliser NHibernate sur un projet. Pour tous leurs inconvénients, des outils tels que LINQ to SQL sont nettement plus faciles à faire fonctionner que NHibernate. Cela dit, je préférerais beaucoup utiliser NHibernate sur un projet que tout autre orm grâce à sa flexibilité incroyable.
Juste sur le point 3, Nhibernate vous permet d'exécuter des procédures SQL droites ou stockées et vous aidera à traduire les résultats dans votre modèle lorsque vous avez vraiment besoin de vous inquiéter de la SQL utilisée.
@Garry n + 1 Sélectionne et son cousin sur la récupération désireuse est au félin de la plupart des projets de Nhinbernate. L'utilisation de SQL droit vaincre tout le point d'un orj
@Programmer Hero Linq et NHibernate ne sont pas mutuellement exclusifs. Ils résolvent deux problèmes différents. Je pense qu'il y a aussi une mise en œuvre de Linq pour Nhibenate.
@Surya - Je dirais que N + 1 sélectionne est une fléchette pour tout orateur qui n'est pas utilisé correctement.
Idem pour une récupération désireuse. De plus, je pense que 3, 4, 5, 6 s'appliqueront à tous les orateurs non?
LINQ2SQL est limitée à SQL Server et Microsoft l'a abandonné en faveur de l'entitéFramework qui est à peu près identique à de nombreux aspects que NHibernate.
@sirrocco ouais tu as peut-être raison. Certains projets ORM ont prétendu avoir "résolu" N + 1 Select problème i> ..so Je ne dirai pas son problème d'acommon sur n'importe quel orj.
Avantages / Inconvénients Comparaison de quoi? Si un ensemble de données médiocre, il s'agit d'un ensemble de choses, si vous comparez à d'autres outils O / R-M, c'est d'autres.
@Dmitriy OP a demandé des inconvénients de porter NHibernate à un projet, quel aspect de NHibernate provoque la pertinence
Je ne comprends pas comment le point 5 est pertinent. NHibernate vous permet de travailler à partir d'un design dirigé sur le domaine à la base de données (alors que la plupart des autres ormes ne le font pas), mais il ne nécessite pas de conception dirigée sur le domaine.
Inconvénients: NHibernate n'est pas un produit Microsoft et fera donc une certaine résistance des collègues qui n'en ont pas entendu parler. Surtout des bigots de Foss. La configuration des fichiers de cartographie et le comportement de chargement paresseux / désireux peut prendre beaucoup de temps. Si votre base de données a une convention de dénomination bizarre, une conception atypique ou des exigences de performance très strictes, plus de travaux peuvent être nécessaires que prévu. P>
Je dis cela beaucoup mais activerecord est une excellente couche sur Nibernate. Il utilise des attributs pour mapper les points de données sur les membres de la classe droite dans les classes elles-mêmes. Les gens n'utilisent pas assez cette chose. P>
Avantages Strong>: P>
(voir par exemple des performances et des tests Linq sur ORMBattle.net ) P>
Technique de conversation, NH est Générateur de code - il lit les métadonnées et génère des classes de proxy à l'aide de Linfu ou de château dynamicproxy. Le support LINQ à Linq2Nhibernate semble être plein dans la mesure où les critères API permet d'aller, alors oui cela plus limité que le HQL mais toujours très puissant et assez puissant pour la plupart des situations. Totalement en désaccord sur la performance.
D'accord avec vous, il s'agit de générateur de code d'exécution, mais pas de temps de conception. Personnellement, je n'aime pas les outils, qui génèrent des tonnes de code dans le temps de conception. C'est donc un avantage de NH. Quant à Linq, il n'y a aucun doute, ils sont juste au début de la route.
Ces points de repère sont incorrects. Voyez ici ayende.com/blog/ Archive / 2009/08/15 / ...
Les repères sont corrects, Oren pense que les fournisseurs ORM ne devraient pas minimiser les frais généraux, ajoutés par ormes. En outre, il a écrit à propos de Ratching Cud uniquement, qu'en est-il des autres opérations? Je conviens que la performance n'est pas le facteur principal, mais dans certains cas, c'est très important.
Les repères sont corrects, mais l'équipe NH ne veut pas jouer honnêtement au jeu. Leur propre test vs ef ils ont fait était simplement un piratage: ormbeTattle.net/index.php/blog/...
Avantages: P>
Inconvénients: P>
courbe d'apprentissage déjà mentionnée. Vous pouvez commencer à utiliser NHibernate très rapidement, mais cela vous prendra des mois pour la maîtriser. Je recommanderais fortement de lire un livre Nibernate Manning. P> Li>
L'écriture de la cartographie XML peut être très fastidieuse surtout pour les grandes bases de données avec des centaines et des milliers de tables et de vues et de procédures stockées. Oui, il y a des outils qui vous aideront en générant ces mappages, mais vous devrez toujours faire beaucoup de travail manuel là-bas. fluent NHibernate semble simplifier ce processus en se débarrassant des mappages XML, de sorte que Castle Activerecord (AR est-il impossible à utiliser pour un domaine anémique lorsque vous définissez des mappages dans des attributs sur vos classes de modèle). P> < / li>
performance peut être faible pour certains scénaristes. Par exemple, grandes opérations en vrac. Pour ceux que vous devrez peut-être utiliser une expérience sans faille, mais son expérience gênante, la moins à dire ... p> li> ol>
Pour générer des mappages XML, considérez au moins un écrivain actif: Utilisation.CastleProject.org/Display/Contrib/ActiveWriter