2009-11-11 5 views
3

Pour un nouveau projet, nous regardons NHibernate. Nous l'aimons beaucoup dans l'ensemble, mais une chose nous dérange: cela semble être très consommateur de ressources. Apparemment, NHibernate chargera toutes les propriétés d'un objet même si vous n'avez besoin que d'une seule propriété. De plus, il fera de même pour les propriétés des objets enfants. Nous considérons donc les avantages et les inconvénients de NHibernate. Nous évaluons le pour et le contre de NHibernate. Que diriez-vous qu'ils sont, et si les avantages compensent les inconvénients?Quels sont les avantages et les inconvénients de NHibernate?

+0

Cela dit, NHibernate est l'une des meilleures choses qui m'arrive (codage). Cela m'a éloigné du traitement des données comme des structures stupides et m'a plutôt conduit à programmer un «vrai» OO-design. –

+0

Merci pour ce Kenny. Cependant, certaines personnes me disent que Hibernate supporte le chargement paresseux des propriétés, mais pas NHibernate, la version .NET. À qui est-ce que je fais confiance? :) – Astaar

+0

Pourquoi était-ce fermé ??? Je le trouve ** très ** constructif, et les réponses sont bonnes aussi. –

Répondre

2

Inconvénients:

  1. Il peut prendre un certain temps pour obtenir le blocage de l'édition de fichiers HBM (bien que vous pouvez utiliser ActiveRecord, qui fait la gestion des sessions de château, et nous allons vous déclarer des relations avec les attributs, qu'il utilise pour générer HBM, puisque NH est sous AR. Note: vous n'avez pas besoin d'utiliser le pattern AR avec AR de Castle).
  2. Il est plus difficile d'exploiter la puissance du moteur de base de données, car NH traite disquaire
  3. Le support Oracle n'est pas aussi bon que les autres dialectes.

Avantages

  1. Vous pouvez utiliser LINQ-à-NH, et utiliser des requêtes de style LINQ contre tous les dialectes pris en charge.
  2. Vous pouvez utiliser HQL au lieu de SQL
  3. Vous pouvez changer avec DB venders quelques lignes dans un fichier de configuration
  4. Il existe des outils pour générer votre schéma pour vous.
  5. Soutien à des instances versioning
2

Avantages:

  1. Deuxième niveau Mise en cache
  2. crée les objets représentant vos données en mode natif
  3. crée les requêtes SQL et évite l'injection SQL
  4. Lazy loading
  5. Voici les clés étrangères sont plus faciles.
  6. traduction DB (changer le dialecte)
  7. Le cadre est bien pris en charge et est opensource
  8. Il y a beaucoup d'outils qui fonctionnent avec et générer des fichiers code/mapping Hibernate

Inconvénients:

  1. peut-être plus lent que directe
  2. l'interrogation initialisation de l'objet est plus lente que la main
  3. La configuration initiale est une douleur
  4. Mapping est vérifiée lors de l'exécution et qui peut être une douleur à installer

Cela dépend de ce que vous faites. Hibernate n'est pas l'outil pour la mise à jour en vrac.

2

Voici quelques choses qui n'ont pas encore été mentionnés (désolé, ce n'est pas au format pro/con). Elles s'appliquent aux situations dans lesquelles vous allez créer un cadre générique pour effectuer des opérations d'entité de base (vous disposez donc d'une bibliothèque NHibernate réutilisable que vous pouvez utiliser pour d'autres projets).

  • La mise en place est une vraie douleur. La nôtre est stable maintenant, mais nous avons commencé à la développer il ya année. Considérez le type d'applications que vous développerez (par exemple, les formulaires Web ou WinForms), car le modèle de session que vous utilisez dans l'infrastructure générique peut être différent; ou, vous pourriez vouloir développer un cadre où vous voudriez être capable de brancher votre propre implémentation de gestion de session. Il y a beaucoup de choix ici.
  • S'il existe une chance de développer une application hautement concurrente à l'aide du framework, concevez le modèle de concurrence dès le début - il pourrait être très difficile de le faire fonctionner correctement plus tard.
  • Si vous utilisez la bibliothèque NHibernate.Mapping.Attributes, vous n'avez pas besoin de traiter les fichiers de mappage XML externes. Il suffit d'ajouter des métadonnées à vos classes d'objets de données. C'est vraiment maniable, intuitif et facile à entretenir.

C'est tout ce que j'ai pour l'instant. Si je pense à autre chose, je vais ajouter à ma liste. NHibernate ne chargera pas le graphe d'objet entier grâce à un chargement paresseux.

Questions connexes