.net - Subsonic Vs NHibernate

Translate

Quel est le consensus sur le moment d'utiliser l'un de ces outils par opposition à l'autre? Je trouve Subsonic très utile pour faire avancer les choses rapidement, mais sur les grands projets, il a tendance à ne pas évoluer et il lie votre modèle de domaine à votre modèle de base de données. C'est là qu'intervient Nhibernate car il vous donne des POCO légers qui ne sont pas liés à votre modèle de base de données, mais le temps de configuration est beaucoup plus long.

This question and all comments follow the "Attribution Required."

Toutes les réponses

Michelle Lee
Translate

On me pose souvent cette question et cela dépend vraiment de combien vous voulez jouer. Je ne peux pas vous dire à quel point les commentaires de Chris Cyvas sur la mise à l'échelle RE SubSonic ont été dommageables - et j'y réponds depuis :(.

L'accord est - du point de vue des performances, SubSonic s'adapte très bien. En termes de croissance de projet - TOUT outil que vous utilisez nécessitera votre attention. Même NHibernate.

J'ai écrit un article sur la façon d'utiliser le modèle de référentiel avec DI (comme vous le feriez avec NHIb ou tout autre outil d'ailleurs) avec SubSonic 2.1:

http://blog.wekeroad.com/blog/subsonic-writing-decoupled-testable-code-with-subsonic-2-1/

J'ai également écrit un article sur les performances de SubSOnic:

http://blog.wekeroad.com/blog/subsonic-scaling/

J'espère que cela t'aides.

La source
Translate

Je recommanderais SubSonic si votre projet fonctionne avec la vue ActiveRecord que la base de données est votre modèle. Vous aurez une classe par table et tout fonctionne comme par magie. Vous pouvez bien sûr modifier et remplacer les choses, mais si vous (ou votre projet) êtes fondamentalement en désaccord avec l'approche classe par table, je regarderais NHibernate car il commence par l'approche plus complexe (mais plus flexible) de la cartographie de votre modèle de domaine à votre base de données.

Si vous utilisez une base de données relativement simple qui est sous votre contrôle (comme dans, vous pouvez changer de colonne sans envoyer huit formulaires à un comité d'examen de surveillance de la division de base de données), je vous recommande de commencer par SubSonic et de passer à NHibernate si SubSonic ne le fait pas répondre à vos besoins.

La source
Dan
Translate

Pour ce que ça vaut ... J'ai eu l'occasion d'utiliser les deux technologies un peu plus depuis que j'ai posé cette question. Et je dois rester que si ces technologies que vous choisissez importent très peu. Bien sûr, NHibernate permet à vos entités commerciales d'être légèrement moins couplées à la structure de votre base de données, mais je trouve toujours qu'il y a de nombreuses occasions où vous devez encore vous plier à la volonté de la base de données.

À mon avis, le seul véritable moyen de séparer totalement votre modèle de domaine de votre modèle de base de données est d'écrire le vôtreDTOS(essentiellement des POCO pour transmettre des données), puis les mapper à votre ORM de choix dans votre couche de données. Mais dans la plupart des cas, cette approche me sera plus compliquée que sa valeur.

La source
Translate

Légèrement hors sujet, mais dans la même veine. Avez-vous regardéChâteau ActiveRecordil est écrit au-dessus deNHibernateet supprime le besoin de passer du temps à créer des mappages XML du code vers la base de données. Comme NHibernate, vous pouvez structurer vos objets de domaine comme vous le souhaitez et générer plus tard un schéma de base de données à partir de cette structure.

En utilisantActiveWriter, un outil contributif, vous pouvez facilement mapper de votre base de données vers des objets de domaine.

La source
Hilary Lee
Translate

Vous pouvez envisager de regarder Fluent NHibernate; cela facilite la gestion de NHibernate. Je ne sais pas à quel point il serait difficile de faire la transition d'un schéma existant, mais si vous créez une nouvelle application, il est bon de définir le modèle de domaine et de générer la base de données dans à peu près n'importe quel serveur de base de données auquel vous pouvez penser. D'après la lecture des autres commentaires ici, je pense que Fluent NHibernate apporte NHibernate à égalité avec SubSonic pour faciliter la configuration.

La source
Translate

Je ne peux pas donner une bonne comparaison car je n'ai pas encore utilisé NHibernate sur un projet, mais j'ai utilisé SubSonic et j'en suis très satisfait. Jusqu'à présent, je n'ai rencontré aucun obstacle majeur lors de son utilisation.

Check-outce postde Rob Conery, l'un des créateurs de SubSonic. Il explique comment découpler votre code SubSonic du reste de l'application. Il mentionne même le fait que cette architecture vous permettrait d'échanger plus tard SubSonic pour une autre couche d'accès aux données telle que NHibernate ou LINQ to SQL.

Je sais que je n'ai pas vraiment répondu à votre question, mais j'espère que cela aide encore.

La source
Translate

I a écrit un article de blogrécemment à propos des ORM .NET qui contiennent Subsonic et ActiveRecord. D'après mon expérience, cela dépend de ce que fait le projet, Subsonic fonctionne beaucoup mieux si vous venez d'un arrière-plan SQL, mais NHibernate en a plus. ActiveRecord est bon pour les petits projets, je ne suis pas convaincu que ce soit plus rapide pour les grands projets que de s'en tenir à NHibernate.

La source
Translate

J'ai évalué les deux et je pense qu'il ne serait pas juste de recommander l'un plutôt que l'autre sans comprendre quels sont vos objectifs. Dans votre question, vous avez bien exposé les différences et je pense que cela doit être votre facteur décisif. Personnellement, j'ai utilisé les deux et je continuerai à utiliser les deux en fonction du projet.

  • NHibernate est mon choix pour les projets à plus grande échelle car il utilise des POCO légers. Si jamais je devais changer mon ORM «je crois», ce serait beaucoup plus facile à refactoriser.
  • SubSonic est mon choix lorsque j'ai un projet à plus petite échelle. Je pense que SubSonic évolue bien en termes de performances. Cependant, je me sens étroitement lié à lui car il est tellement gravé dans mon projet. Dans un projet plus petit, je peux toujours le changer car la base de code est si petite et cela m'aide vraiment à extraire le code comme annoncé.
La source
Translate

Encore une fois légèrement hors sujet, mais je vais secondChâteau ActiveRecord- plutôt que d'utiliser la base de données comme modèle (approche Subsonic) ou de passer des heures dans des spaghettis XML (approche NHibernate), vous placez simplement des attributs sur vos classes de modèle.

Vous pouvez même obtenir ActiveRecordgénérer le schéma de base de donnéespour vous.

Nous avons utilisé cette approche sur plusieurs projets maintenant et les avantages sont les suivants:

  • Chemin de mise à niveau facile vers NHibernate si nécessaire à l'avenir
  • Soutienmodèles d'héritage simples- par exemple. Voiture -> Véhicule
  • Le schéma qu'il génère est très probablement la façon dont vous l'auriez créé de toute façon, vous pouvez donc passer plus de temps à créer l'application plutôt que de vous soucier de garder votre modèle / base de données synchronisé.
La source
Bob
Translate

Je pense que vous avez assez bien réussi. Subsonic génère du code afin que vos objets métier reflètent la structure de votre base de données. nHibernate utilise des fichiers de mappage qui mappent vos objets métier à la base de données afin que vos objets puissent être structurés comme vous le souhaitez.

Quelle est la taille d'un projet? Un soutien à long terme sera-t-il nécessaire? La rentabilité de Subsonic va-t-elle compenser d'éventuels problèmes de mise à l'échelle?

La source
Translate

Nous avons démarré avec subsonic et essayons maintenant d'évaluer si nous allons passer à nhibernate maintenant que nous sommes aux points douloureux de subsonic.

Notre autre option est de créer un terrain d'entente où nous utilisons subsonic pour interroger et charger des objets arbitraires avec leur fonctionnalité «exécuter en tant que liste typée» qui effectue un mappage basé sur le nom à partir d'une instruction SQL de style linq arbitraire. Ou pour essayer de recréer une partie de celui-ci en nhibernate et refactoriser le reste.

Je dis donc que subsonic a du sens dans les petites applications, mais la maintenance des applications subsoniques devient assez épineuse, nous avons des moments particulièrement difficiles avec le code de validation qui se chevauche et les événements déclenchés par le code avant / après. Pour un modèle d'enregistrement actif, subsonic est certainement à 80%, mais fait quelque chose de manière irrégulière et vous empêche d'avoir un contrôle réel sur votre hiérarchie d'héritage, car chaque classe doit hériter d'une table pour revenir à cette table.

La source
Translate

Tenez compte de votre équipe et de la taille de votre projet lorsque vous envisagez ActiveRecord.

D'après mon expérience, ActiveRecord est une abstraction au-dessus de NHibernate qui commence à fuir comme un tamis lorsque vous essayez des scénarios plus compliqués.

Si vous avez un schéma modérément à très compliqué ou non simple, restez avec NHibernate. Vous pouvez le trancher et le couper en dés presque à la perfection.

L'autre endroit où vous pourriez avoir des problèmes est lorsque vous avez besoin d'une requête moyennement compliquée. ActiveRecord cache une grande partie de l'implémentation de NHibernate ... mais vous en aurez besoin pour une requête compliquée, qui deviendra très difficile si vous ne connaissez pas du tout HQL. Soyez prudent, les membres de l'équipe ne se contentent pas de pirater les bords au lieu d'apprendre NHibernate et HQL.

La source
Translate

Acceptez le décalage d'impédance!

regarde ça

:)

Ou pas. Si vous voulez de la performance, faites-le vous-même. Si vous voulez que ce soit rapide et facile, optez pour NHibernate et ActiveRecord. Si vous aimez prétendre que vous savez réellement ce qui se passe au niveau de l'accès aux données, utilisez NHibernate et restez assis avec XML toute la journée pour faire fonctionner plusieurs à plusieurs ... Ou tout simplement ... euh ... faites-le vous-même - ADO.Net FTW!

La source
Translate

Je pense que vous devriez vous en tenir à celui que vous pouvez utiliser le mieux. L'objectif ultime est la productivité et un code de qualité performant. Si vous connaissez SubSonic dans et hors alors tenez-vous-y et si vous connaissez NHibernate en profondeur, tenez-vous-en à NHibernate. C'est une question très subjective. Vous devez également tenir compte du fait que les membres de votre équipe ont une expertise. Si vous êtes bon dans ce domaine, vous pourrez facilement le maintenir.

J'ai vu de grands projets utilisant SubSonic alors que NHibernate est déjà célèbre et largement utilisé.

La décision de choisir ORM ne dépendent uniquement de l'ORM lui-même.

La source
Translate

Le conseil que j'ai reçu sur le sujet est que Subsonic ne s'adapte pas pour gérer des scénarios plus complexes et donc si vous empruntez cette voie, vous vous retrouverez avec un travail essayant de passer à un ORM plus avancé.

Je suis donc plus intéressé par l'utilisation de NHibernate pour les cas complexes, Castle Active Record pour les cas plus simples et je garde un œil sur Fluent NHibernate qui devrait rendre la cartographie NHibernate beaucoup plus facile (surtout une fois que le support de la cartographie basée sur les conventions est amélioré).

La source