Subsonic Vs NHibernate

voix
72

Quel est le concensus sur le moment d'utiliser l'un de ces outils adversed à l'autre? Je trouve Subsonic très utile en termes de faire avancer les choses rapidement, mais sur les grands projets, il ne tend pas à l'échelle, et ses liens de votre modèle de domaine à votre modèle de base de données. C'est là Nhibernate vient car il vous donne Poços légers qui ne sont pas liés à votre modèle de base de données, mais le temps d'installation est beaucoup plus longue.

Créé 04/08/2008 à 17:29
source utilisateur
Dans d'autres langues...                            


15 réponses

voix
83

Je me pose cette question beaucoup et vraiment se résume à combien vous voulez jouer du violon. Je ne peux pas vous dire comment endommager les commentaires de Chris Cyvas RE ont été mise à l'échelle SubSonic - et j'ai répondu à ces :( depuis.

L'affaire est - PERF-sage, SubSonic échelles très bien. En ce qui concerne la croissance du projet - un outil que vous utilisez aura besoin de votre attention. Même NHibernate.

J'ai écrit un post sur la façon d'utiliser le modèle du référentiel avec DI (comme vous le feriez avec NHIb ou tout autre outil pour cette matière) avec Subsonic 2.1:

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

J'ai aussi écrit un post sur la performance de Subsonic:

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

J'espère que cela t'aides.

Créé 12/09/2008 à 22:54
source utilisateur

voix
45

Je recommande 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) fondamentalement en désaccord avec l'approche de classe par table, je regarderais NHibernate puisqu'il commence par l'approche plus complexe (mais plus souple) de votre cartographie 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, vous pouvez modifier les colonnes sans envoyer huit formulaires à une division de base de données comité d'examen de surveillance), je vous recommande de commencer par subsonique et de passer à NHibernate si SubSonic ne répondre à vos besoins.

Créé 06/08/2008 à 22:47
source utilisateur

voix
31

Pour ce que ça vaut ... J'ai eu l'occasion d'utiliser les deux technologies tout à fait abit plus que poser cette question. Et je dois rester que si ces technologies vous choisissez des questions très peu. Bien sûr NHibernate permet à vos entités commerciales soient un peu moins couplés à la structure de votre base de données, mais je trouve toujours qu'il ya beaucoup d'occasions où vous avez encore à se plier à la volonté de la base de données.

À mon avis , la seule vraie façon à séparer totalement votre modèle de domaine de votre modèle de base de données est d'écrire votre propre DPDT (essentiellement Poços pour les données passant autour), puis les associer à votre ORM de choix dans votre couche de données. Mais dans la plupart des cas, cette approche me plus de tracas que sa valeur.

Créé 05/03/2009 à 10:23
source utilisateur

voix
13

Un peu hors sujet, mais dans la même veine. Avez - vous regardé Castle ActiveRecord il est écrit au - dessus de NHibernate et supprime la nécessité de passer le temps de créer des affectations XML à partir du code à la base de données. Comme NHibernate vous pouvez structurer vos objets de domaine que vous souhaitez, puis générer un schéma de base de données de cette structure.

En utilisant ActiveWriter , un outil contribué, vous pouvez facilement la carte à partir de votre base de données à des objets de domaine.

Créé 05/08/2008 à 06:07
source utilisateur

voix
9

Vous pouvez envisager de regarder Fluent NHibernate; il facilite la gestion NHibernate un jeu d'enfant. Je ne sais pas combien il serait difficile de faire la transition d'un schéma existant, mais si vous construisez une nouvelle application, il est agréable de définir le modèle de domaine et de générer la base de données dans pratiquement tous les serveurs de DB que vous pouvez penser. De la lecture des autres commentaires ici, je pense que Fluent NHibernate apporte NHibernate à égalité avec subsonique pour faciliter la configuration.

Créé 04/03/2009 à 21:17
source utilisateur

voix
7

J'ai écrit un billet de blog récemment sur ORM .NET qui a subsonique, et ActiveRecord. De mon expérience , il dépend de ce que le projet fait, Subsonic fonctionne beaucoup mieux si vous venez d'un arrière - plan SQL , mais NHibernate a plus ontop de celui - ci. ActiveRecord est bon pour les petits projets, je ne suis pas convaincu qu'il est plus rapide pour les grands projets que de coller à NHibernate.

Créé 07/10/2008 à 11:10
source utilisateur

voix
7

Je ne peux pas donner une bonne comparaison comme je l'ai pas encore fait utilisé NHibernate sur un projet, mais je l'ai utilisé subsonique et ont été très heureux avec elle. Jusqu'à présent, je ne l'ai pas frappé d'obstacles majeurs lors de son utilisation.

Consultez ce post de Rob Conery, l' un des créateurs de subsonique. Il parle de la façon de 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 subsonique pour une autre couche d'accès aux données telles que NHibernate ou LINQ to SQL.

Je sais que je ne l'ai pas fait de répondre à votre question, mais j'espère que cela aide toujours.

Créé 04/09/2008 à 20:25
source utilisateur

voix
5

J'ai évalué à la fois et je crois qu'il ne serait pas juste de recommander un sur l'autre sans comprendre quels sont vos objectifs. Dans votre question, vous avez dit les différences bien et je crois que doit être votre facteur décisif. Personnellement, je l'ai utilisé à la fois et je continuerai à utiliser à la fois en fonction du projet.

  • NHibernate est mon choix pour les grands projets d'envergure parce que ses utilisations de POCO légère de. Si je devais jamais passer mon ORM « Je crois » que ce serait beaucoup plus facile à factoriser.
  • Subsonic est mon choix quand j'ai un projet à plus petite échelle. Je crois que la performance SubSonic sage échelles bien. Cependant, je me sens étroitement lié à parce qu'il est tellement gravé dans mon projet. Dans petit projet, je peux encore le faire parce que la base de code est si petit et il aide vraiment me déchirer sur le code comme annoncé.
Créé 26/01/2009 à 14:37
source utilisateur

voix
4

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

Vous pouvez même obtenir ActiveRecord pour générer le schéma de base de données pour vous.

Nous avons utilisé cette approche sur un bon nombre de projets maintenant et les avantages sont les suivants:

  • chemin de mise à niveau facile à NHibernate si nécessaire à l'avenir
  • Prise en charge des modèles simples d'héritage - par exemple. Voiture -> Véhicule
  • Le schéma qu'il génère est plus probable que vous auriez créé toute façon, vous pouvez donc passer plus de temps à construire l'application plutôt que de se soucier de garder votre modèle / db en synchronisation.
Créé 16/09/2008 à 13:15
source utilisateur

voix
4

Je pense que vous avez assez bien cloué. Subsonic génère du code, de sorte que vos objets métier sera le reflet de la structure de votre base de données. NHibernate utilise les fichiers de mappage qui mappent vos objets métier à la base de données afin que vos objets peuvent être structurés comme bon vous semble.

Quelle est la taille d'un projet est-ce? Y aura-t un soutien à long terme nécessaire? Est l'efficacité des coûts de Subsonic va compenser les problèmes de mise à l'échelle potentiels?

Créé 04/08/2008 à 18:12
source utilisateur

voix
3

Tenez compte de votre équipe et la taille du projet lors de l'examen ActiveRecord.

Dans mon expérience, ActiveRecord est une abstraction au-dessus de NHibernate qui commence à fuir comme un tamis en essayant des scénarios plus complexes.

Si vous avez un schéma modérément à fortement compliqué ou non simple, le bâton avec NHibernate. Vous pouvez couper et dés à la perfection proche.

L'autre endroit que vous pourriez avoir des ennuis quand vous avez besoin est une requête modérément compliquée. ActiveRecord cache beaucoup de mise en œuvre de NHibernate ... mais vous en aurez besoin pour une requête complexe, qui deviendra très difficile si vous êtes complètement familier avec HQL. Soyez prudents membres de l'équipe ne sont pas seulement à bout du bords au lieu d'apprentissage et NHibernate HQL.

Créé 02/10/2008 à 20:26
source utilisateur

voix
3

Nous subsonique et avec force du poignet essayons maintenant d'évaluer si nous allons passer à NHibernate maintenant que nous sommes aux points de douleur de subsonique.

Notre autre option est de créer un terrain d'entente où nous utilisons subsonique pour interroger et charger des objets arbitraires avec leur « exécuter comme une liste typée » fonctionnalité qui fait une cartographie de nom hors d'une instruction SQL de style LINQ arbitraire. Ou pour essayer de recréer un peu dans NHibernate et factoriser le reste.

Je dis subsonique est logique dans de petites applications, mais la maintenance sur les applications subsoniques devient assez poilu, nous avons parfois particulièrement difficiles avec le code de validation qui se chevauchent, et pré / post dans le code déclenché des événements. Pour un motif d'enregistrement actif, subsonique est certainement 80% là-bas, mais ne somethings d'une manière squameuse, et vous empêche d'avoir un contrôle réel sur votre hiérarchie d'héritage, puisque chaque classe doit hériter d'une table pour revenir à cette table.

Créé 30/08/2008 à 07:18
source utilisateur

voix
2

Je crois que vous devriez en tenir à un que vous pouvez utiliser le meilleur. Le but ultime est la productivité et la bonne exécution du code de qualité. Si vous connaissez subsonique et sortir puis de s'y tenir et si vous connaissez NHibernate en stick de profondeur NHibernate. Cette question est très subjective. Vous devez également tenir compte du fait que ce que votre équipe membres sont experts compétents avec. Si vous êtes bon dans ce domaine, vous serez en mesure de maintenir facilement.

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

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

Créé 03/11/2009 à 06:52
source utilisateur

voix
2

Embrassez l'impédance Mismatch!

regarde ça

:)

Ou pas. Si vous voulez des performances, faites-le vous-même. Si vous voulez rapidement et facilement, aller avec NHibernate et ActiveRecord. Si vous aimez faire semblant que vous savez réellement ce qui se passe au niveau de l'accès aux données, utilisez NHibernate et asseyez avec XML toute la journée pour obtenir un aller beaucoup à beaucoup ... Ou tout simplement ... euh .. faire vous-même - ADO.Net FTW!

Créé 08/02/2009 à 02:51
source utilisateur

voix
0

Le conseil que j'ai eu sur le sujet est que Subsonic n'échelle pas à gérer des scénarios plus complexes et donc si vous allez dans cette voie, vous vous retrouverez avec un travail en essayant d'échanger sur un ORM plus avancé.

Je suis donc plus intéressé à utiliser NHibernate pour les cas complexes, le château Active Record pour les cas simples et je garde un oeil sur Fluent NHibernate qui devrait rendre la cartographie de NHibernate beaucoup plus facile (surtout une fois que le support de cartographie de convention est améliorée).

Créé 25/10/2008 à 15:20
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more