Wie interagieren Sie am liebsten mit Datenbanken Ihrer Programmiersprache?[geschlossen]

StackOverflow https://stackoverflow.com/questions/8087

  •  08-06-2019
  •  | 
  •  

Frage

Es gibt zahlreiche Möglichkeiten, eine Verbindung zur Datenbankebene herzustellen und mit ihr zu interagieren.In Java sind dies beispielsweise übliche Verwendungen JDBC Aufrufe von Roh-SQL, objektrelationalen Mappern, JDBCTemplate (Frühling), gespeicherte Prozeduren usw.

Welche Option bevorzugen Sie in Ihrer Sprache und warum?Wann würden Sie die anderen berücksichtigen?

War es hilfreich?

Lösung

ORM: Je weniger ich über Datenbanken nachdenken muss, desto besser.

Andere Tipps

Mir gefällt die 3 + 1-Stufen-Methode sehr gut.Eine Ebene für die Benutzeroberfläche, eine für die Geschäftslogik und für die Speicherung von Daten.Das letzte, was du sagst?Domänenobjekte und Schnittstellen.Dadurch ist es möglich, eine oder zwei der Hauptschichten sowie die Domänen-„Schicht“ zu laden, und der Code sollte funktionieren.

Es hängt stark davon ab Abhängigkeitsspritze Und Umkehrung der Kontrolle Prinzipien.Die Daten-/Persistenzschicht erledigt nur zwei Dinge.Es erstellt, liest, aktualisiert und löscht Daten und ordnet sie dem Domänenobjektformat zu.

Die UI-Ebene bewirkt genau das Gegenteil.Es zeigt und empfängt Daten auf eine Weise, mit der sich der Benutzer identifizieren kann, und ordnet diese Ausgabe/Eingabe dem und vom Domänenobjektformat zu.

Die Ebene der Geschäftslogik muss nur eines wissen.Geschäftslogik.Es ist ihm egal, woher die Daten kommen, und es ist ihm egal, wo die Datenschicht sie ablegt.Es weiß, dass es ein Konto kennzeichnen sollte, das gerade überzogen wurde. Die physische Vorgehensweise gehört nicht zu seinen Aufgaben.

Die Domänenobjekte selbst verfügen über keine Logik, sie sind lediglich Container zum Übertragen von Daten zwischen den Ebenen.Dies bedeutet, dass Sie die Domänenobjekte und Schnittstellen laden können, ohne sich überhaupt Gedanken über Abhängigkeiten machen zu müssen.

Letztendlich habe ich das Gefühl, dass ich über eine ziemlich klare Codebasis mit klar getrennten Ebenen verfüge.Und mit einigen strengen Schnittstellen und guten Basisklassen besteht der Großteil der Codierung lediglich darin, der Software zu sagen, was zu tun ist, wenn X passiert.Genau so soll es sein.

</rant>

Bearbeiten:Oh ja.Dies gilt sowohl für LINQ, SubSonic, und andere ORMs.

Ruby on Rails‘ Aktiver Rekord wischt den Boden mit allem, was ich bisher gesehen habe. LINQ In manchen Fällen scheint es besser zu sein, aber ActiveRecord ist einfach so flexibel.

Von nun an ist LINQ für mich der richtige Weg

Ich bevorzuge den Aufbau einer Geschäftsobjektmodellebene (Objekte und Objektsammlungen).

Ich baue die Fähigkeit zur Interaktion mit der Datenbank in jedes Objekt/jede Sammlung ein (für SQL Server verwende ich System.Data.SqlClient).Ich habe dieses Muster für SQL Server, MySQL und Oracle verwendet.

Dann interagiere ich mit den Objekten aus meinem Anwendungscode.

Durch die Abstraktion meiner Datenbank in Objekte ist mein Anwendungscode unabhängig von der Backend-Datenbank konsistent.

ORM ist in der Tat fantastisch.

Ich verwende SQL Alchemy, wenn ich in Python arbeite – es funktioniert mit fast jedem DBMS, das mir begegnet ist.

Für leichte datengesteuerte Anwendungen unter MacOS X verwende ich Core Data, das über ein großartiges Datenmodellierungstool verfügt, auf das über Xcode zugegriffen werden kann.

Beides zeigt, dass ORM, wenn es richtig gemacht wird, ausgezeichnet ist.Ich hatte weniger Erfolg und Freude mit EJB.

Ich bin noch nicht in die LINQ-Welt eingestiegen, aber ich habe die DataTable/TableAdapter-Klassen, die Visual Studio mithilfe eines XSD-Datensatzes erstellt hat, wirklich liebgewonnen.Durch ein paar Drag-and-Clicks nach dem Erstellen meines Datenbankschemas habe ich jetzt ein DataSet/DataTable-Objekt, das stark typisiert ist, und ich habe Adaptermethoden, die für alle meine CRUD-Anweisungen parametrisierte Abfragen an meine gespeicherten Prozeduren verwenden.Für einige dieser Prozeduren, die nicht direkt an eine Tabelle gebunden sind, werden sogar Abfragetabellenadapter erstellt.

Oh, und wenn Sie die gespeicherten Prozeduren noch nicht erstellt haben und nur über die Tabellen verfügen, erstellt der Assistent die Prozeduren oder Ad-hoc-SQL-Anweisungen für Sie.

Dies gibt es seit Visual Studio 2005 und hat meine „Struktur“-Zeit mit meinen neuen Web-Apps drastisch verkürzt und ich kann mich mehr auf die Geschäfts- und Präsentationslogik konzentrieren.

Wir verwenden einen gemischten Ansatz, je nachdem, was für die jeweilige Situation innerhalb der Anwendung geeignet ist:

  • Beim Lesen einer Seite voller Informationen, die angezeigt und von einem Benutzer aktualisiert werden sollen, verwenden wir Hibernate
  • Beim Verarbeiten einer Reihe von Aktualisierungen oder beim Zusammenfassen, wenn sich die meisten Daten bereits in der Datenbank befinden (z. B.End-of-Day-Verarbeitung) Wir verwenden PL/SQL (und versuchen, in Mengen zu denken)
  • Wenn ein Benutzer eine Suche durchführt oder einen zusammenfassenden Bericht ausführt, verwenden wir ibatis sqlmaps, um etwas SQL aufzubauen und nur die Felder zurückzubringen, die uns interessieren (nicht jede Spalte und schon gar keine unnötigen untergeordneten Zeilen, urggh)
  • Bei allem, was wirklich schnell gehen muss, verwenden wir den Ansatz, der am besten funktioniert

Dies ist mit Java/Oracle.

Aktiver Rekord, ein Muster, das (glaube ich) zuerst bei Fowler dokumentiert wurde Muster der Unternehmensarchitektur.Ich glaube, dass es in anderen Sprachen als Ruby implementiert ist, obwohl es als Kerntechnologie in Rails bekannt ist.Wie auch immer, es ist eine nette Abstraktion der Datenbank, obwohl ich zugeben muss, dass ich sie etwas klobig finde und im Bereich find_by_sql liegt.Aber das liegt vielleicht nur an mir.

Aber (ich setze jetzt den Hut des mürrischen alten Mannes auf) Alle ORMs der Welt sind kein Ersatz für gute SQL-Kenntnisse, ohne die ich wirklich nicht möchte, dass der Zugriff auf ein RDBMS überhaupt erlaubt wird.

Wir nutzen Delphi und Oracle Data Access Components (ODAC) und ADO über Oracle.OleDBProvider.

Meine Lieblingsmethode ist die Verwendung von Smalltalk mit einem GemStone-Objekt-Repository.Warum?Kein ORM-Problem zu lösen.Ich würde nur dann etwas anderes in Betracht ziehen, wenn mein Arbeitgeber ihn dazu zwingt oder bedroht.

Am liebsten verwende ich eine Objektabstraktionsebene.Im Idealfall ist dies der Fall nur Ort, der mit SQL arbeitet.Aber in der Praxis müssen die Objekte manchmal auch SQL-ähnliche Dinge tun.Aber nichts außerhalb des Objekts.

Bisher habe ich solche Ebenen selbst geschrieben, weil das Angebot zu umständlich, zu langsam oder zu groß war.

Ich verwende einfaches JDBC, weil ich eine datengesteuerte Anwendung entwickle und mein Datenbankmodell sehr komplex ist.Alles ist in der Datenbank beschrieben, sogar die Struktur anderer Tabellen.Darüber hinaus verwende ich häufig gespeicherte Prozeduren.Daher ist ORM für mich keine Option.

Ich mag Überwintern eine Menge :)

Ich weiß, dass es eine Lernkurve erfordert, aber wenn man es erst einmal beherrscht, ist es ganz nett.

Unnötig zu erwähnen, dass ich es kaum erwarten kann, das Neue in die Hände zu bekommen Entity-Framework in .NET 3.5 SP1 (Ich weiß, dass es bereits verfügbar ist, aber ich bin etwas faul, XML einzugeben :))

In C# liebe ich LINQ to SQL für alles Neue, aber ich benutze es wirklich gerne .netTiers + CodeSmith-Generator um eine schnelle und schmutzige Datenschicht in die Datenbank zu bringen, wenn ich C# unter .NET 2.0 verwende.

Wir verwenden derzeit ODAC um mit der Oracle-Datenbank zu kommunizieren und viele Oracle-Pakete zu verwenden (PL/SQL).Das n-Tier-System erfolgt über RemObjects, was bedeutet, dass unser Client überhaupt kein SQL enthält und nur die Möglichkeit benötigt, HTTP-Anfragen zu senden, sodass kein Installationsaufwand entsteht.

All dies wird mit Borland Delphi durchgeführt und läuft seit 2 Jahren in einer Produktionsumgebung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top