11
votes

Avantages et inconvénients de NHibernate

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?


0 commentaires

6 Réponses :


1
votes

Avantages:

  1. Caching
  2. SIMPLICITÉ DANS VOTRE CODE
  3. POWER
  4. Flexibilité
  5. Support multi-bases de données

    Inconvénients:

    1. Arrête que vous devez écrire votre propre code de persistance
    2. peut réduire vos connaissances sur SQL

      Applications Vous devez l'utiliser pour:


4 commentaires

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


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 ...



0
votes

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.

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:

1) Vous obtenez un support LINQ (ce qui nécessite quelque chose comme un orm)

2) NHibernate est très mature

Il n'y a pas d'inconvénients significatifs. Il existe d'autres options, mais ces autres options ont des inconvénients importants.

J'en ai écrit d'autres il y a un moment:

.NET et orm - décisions, Décisions


0 commentaires

12
votes

Étant donné que d'autres PPL ont répertorié des avantages, je vais simplement énumérer les inconvénients


Inconvénients

  1. Augmentation du temps de démarrage en raison de la préparation des métadonnées (non bonne pour les applications de bureau)
  2. énorme courbe d'apprentissage sans fond orm.
  3. Comparativement difficile à mélanger SQL généré.
  4. Difficile d'obtenir la gestion de la session à droite si utilisé dans des environnements non typiques (lire non webapps)
  5. non adapté aux applications sans modèle d'objet de domaine propre (aucune application de toutes les applications dans le monde n'a besoin de modèles d'objet de domaine propre).
  6. doit sauter à travers des cerceaux si vous avez mal conçu (legacy) DB Schema.

11 commentaires

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 ..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.



0
votes

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.

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.


0 commentaires

3
votes

Avantages :

  • Open Source
  • basé sur des modèles largement approuvés
  • nh n'est pas générateur de code :)

    inconvénients :

    • Support LINQ à moitié fait
    • Basse performance

      (voir par exemple des performances et des tests Linq sur ORMBattle.net )


5 commentaires

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/...



5
votes

Avantages:

  1. Capacités de cartographie flexibles et très puissantes.
  2. Caching.
  3. Une unité de travail très polie.
  4. future requête ( article ).
  5. Les classes de modèle sont POCO - ce qui signifie efficacement que vous pouvez facilement mettre en œuvre un antipartite de domaine anémique.
  6. Intercepteurs - Vous pouvez faire une sorte de programmation orientée forme ... comme une audition, une journalisation, une autorisation, une validation, une autorisation, une autorisation, des ecteurs pour votre domaine.
  7. Lucene.net et NHibernate sont bien intégrés à l'autre - vous donne une implémentation très rapide et efficace de l'indexation de texte intégral.
  8. C'est très mature et populaire dans l'environnement d'entreprise.
  9. Big Community.

    Inconvénients:

    1. 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.

    2. 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). < / li>

    3. 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 ...


1 commentaires

Pour générer des mappages XML, considérez au moins un écrivain actif: Utilisation.CastleProject.org/Display/Contrib/ActiveWriter