Wie ist die Übereinstimmung darüber, wann eines dieser Tools verwendet werden soll, die dem anderen gegenüberstehen? 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.
quelle
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
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 Sie diese Technologien 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 Domänenmodell vollständig von Ihrem Datenbankmodell zu trennen , darin, Ihr eigenes DTOS (im Wesentlichen POCOs für die Weitergabe von Daten) zu schreiben und diese dann wieder dem ORM Ihrer Wahl in Ihrer Datenschicht zuzuordnen. Aber in den meisten Fällen wird dieser Ansatz mich mehr belasten als es wert ist.
quelle
Etwas abseits des Themas, aber in ähnlicher Weise. Haben Sie sich Castle ActiveRecord angesehen, das auf NHibernate geschrieben ist und keine Zeit mehr für die Erstellung von XML-Zuordnungen vom Code zur Datenbank benötigt. Wie bei NHibernate können Sie Ihre Domänenobjekte nach Ihren Wünschen strukturieren und später aus dieser Struktur ein Datenbankschema generieren.
Mit ActiveWriter , einem bereitgestellten Tool, können Sie Domänenobjekten problemlos eine Zuordnung von Ihrer Datenbank zuordnen .
quelle
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 gleichsetzt.
quelle
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.
Schauen Sie sich diesen Beitrag von Rob Conery an, einem der Entwickler 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
Ich habe kürzlich einen Blog-Beitrag über .NET ORMs mit Subsonic und ActiveRecord geschrieben. 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
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.
quelle
Wieder etwas abseits des Themas, aber ich werde Castle ActiveRecord unterstützen - 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 ActiveRecord sogar veranlassen, das Datenbankschema für Sie zu generieren .
Wir haben diesen Ansatz bereits bei einigen Projekten angewendet und haben folgende Vorteile:
quelle
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
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
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
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
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.
quelle
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