.net - Subsonic Vs NHibernate

Translate

Wie ist die Übereinstimmung darüber, wann eines dieser Tools verwendet werden soll, das dem anderen gegenübersteht? Ich finde Subsonic sehr nützlich, um Dinge schnell erledigen zu können, aber bei großen Projekten ist es nicht skalierbar und bindet Ihr Domain-Modell an Ihr Datenbankmodell. Hier kommt Nhibernate ins Spiel, da es Ihnen leichte POCOs bietet, die nichts mit Ihrem Datenbankmodell zu tun haben, aber die Einrichtungszeit ist viel länger.

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

Alle Antworten

Michelle Lee
Translate

Diese Frage wird mir oft gestellt und es kommt wirklich darauf an, wie viel du fummeln willst. Ich kann Ihnen nicht sagen, wie schädlich Chris Cyvas 'Kommentare zur RE SubSonic-Skalierung waren - und ich habe seitdem darauf reagiert :(.

Der Deal ist - perfekt, SubSonic skaliert sehr gut. In Bezug auf das Projektwachstum - JEDES Tool, das Sie verwenden, erfordert Ihre Aufmerksamkeit. Sogar NHibernate.

Ich habe einen Beitrag darüber geschrieben, wie das Repository-Muster mit DI (wie bei NHIb oder einem anderen Tool) mit SubSonic 2.1 verwendet wird:

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

Ich habe auch einen Beitrag über die Leistung von SubSOnic geschrieben:

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

Hoffe das hilft.

Quelle
Translate

Ich würde SubSonic empfehlen, wenn Ihr Projekt mit der ActiveRecord-Ansicht arbeitet, dass die Datenbank Ihr Modell ist. Sie erhalten eine Klasse pro Tisch und alles funktioniert auf magische Weise. Sie können die Dinge natürlich optimieren und überschreiben, aber wenn Sie (oder Ihr Projekt) dem Class-per-Table-Ansatz grundsätzlich nicht zustimmen, würde ich NHibernate betrachten, da es mit dem komplexeren (aber flexibleren) Ansatz der Zuordnung Ihrer Daten beginnt Domain-Modell zu Ihrer Datenbank.

Wenn Sie eine relativ einfache Datenbank verwenden, die unter Ihrer Kontrolle steht (wie in können Sie Spalten ändern, ohne acht Formulare an ein Überprüfungsgremium für die Datenbankabteilung zu senden), würde ich empfehlen, mit SubSonic zu beginnen und zu NHibernate zu wechseln, wenn SubSonic dies nicht tut entspricht deinen Bedürfnissen.

Quelle
Dan
Translate

Für was es wert ist ... Ich hatte die Gelegenheit, beide Technologien mehr zu nutzen, seit ich diese Frage gestellt habe. Und ich muss bleiben, was, wenn diese Technologien Sie wählen, sehr wenig ausmacht. Sicher, mit NHibernate können Ihre Geschäftseinheiten etwas weniger an Ihre Datenbankstruktur gekoppelt werden, aber ich finde immer noch, dass es viele Fälle gibt, in denen Sie sich immer noch dem Willen der Datenbank beugen müssen.

Meiner Meinung nach besteht die einzig wahre Möglichkeit, Ihr Domain-Modell vollständig von Ihrem Datenbankmodell zu trennen, darin, Ihr eigenes zu schreibenDTOS(im Wesentlichen POCOs zum Weitergeben von Daten) und ordnen Sie sie dann wieder dem ORM Ihrer Wahl in Ihrer Datenschicht zu. Aber in den meisten Fällen wird dieser Ansatz mich mehr belasten als es wert ist.

Quelle
Translate

Etwas abseits des Themas, aber in ähnlicher Weise. Hast Du Dir angesehenSchloss ActiveRecordes steht oben draufNHibernateund es entfällt die Zeit, XML-Zuordnungen vom Code zur Datenbank zu erstellen. Wie bei NHibernate können Sie Ihre Domänenobjekte nach Ihren Wünschen strukturieren und später aus dieser Struktur ein Datenbankschema generieren.

Verwenden vonActiveWriterMit diesem Tool können Sie problemlos Domänenobjekte aus Ihrer Datenbank zuordnen.

Quelle
Hilary Lee
Translate

Sie können sich Fluent NHibernate ansehen. Dies macht die Verwaltung von NHibernate zum Kinderspiel. Ich bin mir nicht sicher, wie schwierig es wäre, ein vorhandenes Schema zu ändern, aber wenn Sie eine neue Anwendung erstellen, ist es hilfreich, das Domänenmodell zu definieren und die Datenbank auf so ziemlich jedem DB-Server zu generieren, den Sie sich vorstellen können. Nach dem Lesen der anderen Kommentare hier denke ich, dass Fluent NHibernate NHibernate zur Vereinfachung der Konfiguration mit SubSonic gleichwertig macht.

Quelle
Translate

Ich kann keinen guten Vergleich geben, da ich NHibernate noch nicht für ein Projekt verwendet habe, aber ich habe SubSonic verwendet und war sehr zufrieden damit. Bisher bin ich bei der Verwendung auf keine größeren Hindernisse gestoßen.

Auscheckendieser Beitragvon Rob Conery, einem der Schöpfer von SubSonic. Er spricht darüber, wie Sie Ihren SubSonic-Code vom Rest der App entkoppeln können. Er erwähnt sogar die Tatsache, dass Sie mit dieser Architektur SubSonic später gegen eine andere Datenzugriffsschicht wie NHibernate oder LINQ to SQL austauschen können.

Ich weiß, dass ich Ihre Frage nicht beantwortet habe, aber ich hoffe, das hilft immer noch.

Quelle
Translate

I schrieb einen Blog-BeitragKürzlich über .NET ORMs mit Subsonic und ActiveRecord. Nach meiner Erfahrung hängt es davon ab, was das Projekt tut. Subsonic funktioniert viel besser, wenn Sie einen SQL-Hintergrund haben, NHibernate jedoch mehr davon hat. ActiveRecord eignet sich für kleinere Projekte. Ich bin nicht davon überzeugt, dass es für größere Projekte schneller ist als das Festhalten an NHibernate.

Quelle
Translate

Ich habe beide bewertet und glaube, es wäre nicht fair, sie übereinander zu empfehlen, ohne zu verstehen, was Ihre Ziele sind. In Ihrer Frage haben Sie die Unterschiede gut dargelegt, und ich glaube, das muss Ihr entscheidender Faktor sein. Persönlich habe ich beide verwendet und werde beide je nach Projekt weiterhin verwenden.

  • NHibernate ist meine Wahl für größere Projekte, da es leichte POCOs verwendet. Wenn ich jemals mein ORM "Ich glaube" austauschen würde, wäre dies viel einfacher zu überarbeiten.
  • SubSonic ist meine Wahl, wenn ich ein kleineres Projekt habe. Ich glaube, dass die Leistung von SubSonic gut skaliert. Ich fühle mich jedoch eng damit verbunden, weil es so in mein Projekt eingraviert ist. In kleineren Projekten kann ich es immer noch ausschalten, weil die Codebasis so klein ist und es mir wirklich hilft, Code wie angekündigt herauszureißen.
Quelle
Translate

Wieder etwas abseits des Themas, aber ich werde ZweiterSchloss ActiveRecord- Anstatt die Datenbank als Modell zu verwenden (Subsonic-Ansatz) oder Stunden in XML-Spaghetti zu verbringen (NHibernate-Ansatz), platzieren Sie einfach Attribute in Ihren Modellklassen.

Sie können sogar ActiveRecord dazu bringenGenerieren Sie das Datenbankschemafür dich.

Wir haben diesen Ansatz bereits bei einigen Projekten angewendet und haben folgende Vorteile:

  • Einfacher Upgrade-Pfad zu NHibernate, falls dies in Zukunft erforderlich sein sollte
  • Unterstützung füreinfache Vererbungsmodelle- z.B. Auto -> Fahrzeug
  • Das Schema, das es generiert, ist höchstwahrscheinlich so, wie Sie es ohnehin erstellt hätten, sodass Sie mehr Zeit damit verbringen können, die App zu erstellen, als sich darum zu kümmern, Ihr Modell / Ihre Datenbank synchron zu halten.
Quelle
Bob
Translate

Ich denke, du hast es ziemlich genau verstanden. Subsonic generiert Code, sodass Ihre Geschäftsobjekte Ihre Datenbankstruktur widerspiegeln. nHibernate verwendet Zuordnungsdateien, die Ihre Geschäftsobjekte der Datenbank zuordnen, sodass Ihre Objekte beliebig strukturiert werden können.

Wie groß ist das Projekt? Wird langfristige Unterstützung benötigt? Wird die Kosteneffizienz von Subsonic potenzielle Skalierungsprobleme ausgleichen?

Quelle
Translate

Wir haben mit Unterschall gebootet und versuchen nun zu bewerten, ob wir jetzt, da wir uns an den Schwachstellen von Unterschall befinden, auf Ruhezustand umschalten werden.

Unsere andere Option besteht darin, einen Mittelweg zu schaffen, auf dem wir Unterschall verwenden, um beliebige Objekte mit ihrer Funktion "Als typisierte Liste ausführen" abzufragen und zu laden, die eine namensbasierte Zuordnung einer beliebigen SQL-Anweisung im Linq-Stil durchführt. Oder um zu versuchen, etwas davon im Ruhezustand neu zu erstellen und den Rest umzugestalten.

Ich sage also, Unterschall macht in kleinen Apps Sinn, aber die Wartung von Unterschall-Apps wird ziemlich haarig. Wir haben besonders schwere Zeiten mit überlappendem Validierungscode und Ereignissen, die durch Code vor / nach dem Code ausgelöst werden. Für ein aktives Aufzeichnungsmuster ist Unterschall definitiv zu 80% vorhanden, macht jedoch etwas Flockiges und verhindert, dass Sie eine echte Kontrolle über Ihre Vererbungshierarchie haben, da jede Klasse eine Tabelle erben muss, um zu dieser Tabelle zurückzukehren.

Quelle
Translate

Berücksichtigen Sie Ihre Team- und Projektgröße, wenn Sie ActiveRecord in Betracht ziehen.

Nach meiner Erfahrung ist ActiveRecord eine Abstraktion über NHibernate, die beim Versuch komplizierterer Szenarien wie ein Sieb ausläuft.

Wenn Sie ein mäßig bis stark kompliziertes oder unkompliziertes Schema haben, bleiben Sie bei NHibernate. Sie können es nahezu perfekt schneiden und würfeln.

Der andere Ort, an dem Sie möglicherweise in Schwierigkeiten geraten, ist, wenn Sie eine mäßig komplizierte Abfrage benötigen. ActiveRecord verbirgt einen Großteil der Implementierung von NHibernate ... aber Sie benötigen es für eine komplizierte Abfrage, die sehr schwierig wird, wenn Sie mit HQL nicht vertraut sind. Seien Sie vorsichtig, Teammitglieder hacken nicht nur an den Rändern herum, anstatt NHibernate und HQL zu lernen.

Quelle
Translate

Umfassen Sie die Impedanzfehlanpassung!

Schau dir das an

:)

Oder nicht. Wenn Sie Leistung wünschen, tun Sie es selbst. Wenn Sie es schnell und einfach möchten, wählen Sie NHibernate und ActiveRecord. Wenn Sie gerne so tun, als ob Sie tatsächlich wissen, was auf Datenzugriffsebene vor sich geht, verwenden Sie NHibernate und setzen Sie sich den ganzen Tag mit XML in Verbindung, um viele zu viele zum Laufen zu bringen ... Oder machen Sie es einfach selbst - ADO.Net FTW!

Quelle
Translate

Ich glaube, Sie sollten sich an eine halten, die Sie am besten nutzen können. Das ultimative Ziel ist die Produktivität und der gute Qualitätscode. Wenn Sie SubSonic in- und auswendig kennen, bleiben Sie dabei, und wenn Sie NHibernate genau kennen, halten Sie sich an NHibernate. Dies ist eine sehr subjektive Frage. Sie sollten auch berücksichtigen, dass Ihr Teammitglied über Fachwissen verfügt. Wenn Sie gut darin sind, können Sie es leicht warten.

Ich habe große Projekte mit SubSonic gesehen, während NHibernate bereits berühmt und weit verbreitet ist.

Die Entscheidung, ORM zu wählen, trifft nicht zu hängen ausschließlich vom ORM selbst ab.

Quelle
Translate

Der Rat, den ich zu diesem Thema erhalten habe, ist, dass Subsonic nicht für komplexere Szenarien skaliert werden kann. Wenn Sie also diesen Weg gehen, erhalten Sie einen Job, der versucht, zu einem fortgeschritteneren ORM zu wechseln.

Ich bin daher mehr an der Verwendung von NHibernate für komplexe Fälle und Castle Active Record für einfachere Fälle interessiert und behalte Fluent NHibernate im Auge, was die NHibernate-Zuordnung erheblich vereinfachen sollte (insbesondere, wenn die Unterstützung für konventionelle Zuordnungen verbessert wurde).

Quelle