Persistenz in Java
In den letzten Jahren habe ich auf dem Gebiet der Persistenzabstraktion in Java Erfahrungen mit Konzepten wie EJB 2.0, Hibernate, JPA und Eigenbau gesammelt. Sie schienen mir eine steile Lernkurve und viel Komplexität zu haben. Als großer Fan von SQL dachte ich außerdem, dass viele Abstraktionsmodelle zu viel Abstraktion über SQL bieten und Konzepte wie "Kriterien", "Prädikate" und "Einschränkungen" erstellen, die sehr gute Konzepte sind, aber nicht SQL.
Die allgemeine Idee der Persistenzabstraktion in Java scheint auf dem objektrelationalen Modell zu beruhen, bei dem RDBMS in gewisser Weise mit der OO-Welt übereinstimmen. Die ORM-Debatte war schon immer eine emotionale, da es anscheinend keine einzige Lösung gibt, die allen zusagt - wenn es überhaupt eine solche Lösung geben kann.
jOOQ
Meine persönliche Präferenz, wie man ORM-bezogene Probleme vermeidet, ist, mich an die relationale Welt zu halten. Nun sollte die Wahl des Datenmodellparadigmas nicht das Thema der Diskussion sein, da es eine persönliche Präferenz ist oder eine Frage, welches Datenmodell für ein konkretes Problem am besten geeignet ist. Die Diskussion, die ich beginnen möchte, dreht sich um mein eigenes Persistenz-Tool namens jOOQ . Ich habe jOOQ entwickelt, um die meisten Vorteile moderner Persistenz-Tools zu bieten:
- Eine domänenspezifische Sprache basierend auf SQL
- Quellcodegenerierung, die das zugrunde liegende Datenbankschema auf Java abbildet
- Unterstützung für viele RDBMS
Hinzufügen einiger Funktionen, die nur wenige moderne Persistenz-Tools bieten (korrigieren Sie mich, wenn ich falsch liege):
- Unterstützung für komplexes SQL - Unions, verschachtelte Selects, Self-Joins, Aliasing, Case-Klauseln, arithmetische Ausdrücke
- Unterstützung für nicht standardmäßiges SQL - gespeicherte Prozeduren, UDTs, ENUMS, native Funktionen, Analysefunktionen
Weitere Informationen finden Sie auf der Dokumentationsseite: http://www.jooq.org/learn.php . Sie werden sehen, dass in Linq für C # ein sehr ähnlicher Ansatz implementiert ist, obwohl Linq nicht ausschließlich für SQL entwickelt wurde.
Die Frage
Nun, da ich ein großer Fan von SQL bin, frage ich mich, ob andere Entwickler meine Begeisterung für jOOQ (oder Linq) teilen werden. Ist ein solcher Ansatz zur Persistenzabstraktion realisierbar? Welche Vor- und Nachteile sehen Sie? Wie könnte ich jOOQ verbessern und was fehlt Ihrer Meinung nach? Wo habe ich mich geirrt, konzeptionell oder praktisch?
Kritische, aber konstruktive Antworten sind erwünscht
Ich verstehe, dass die Debatte emotional ist. Es gibt viele großartige Tools, die bereits ähnliche Aufgaben ausführen. Was mich interessiert, ist kritisches, aber konstruktives Feedback, basierend auf Ihren eigenen Erfahrungen oder Artikeln, die Sie vielleicht gelesen haben.