Angenommen, ich habe eine App, die idealerweise in der Lage sein sollte, eine relationale Datenbank, Objektdatenbank, XML-Dateien oder was auch immer zu verwenden, um ihre Daten zu erhalten. Im Sinne der Programmierung von Schnittstellen anstelle von Implementierungen habe ich eine generische DataStore-Schnittstelle, die einen Vertrag für alle E/A-Vorgänge angibt, an denen der Datenspeicher beteiligt ist. Diese Schnittstelle kann durch konkrete Klassen wie RDBMSDataStore, OODBMSDataStore, XMLFileDataStore usw. implementiert werden.Datenbankunabhängige Abfragen an das Extrem in Java ... oder allgemein
Diese gut, so lange funktioniert, wie ich den Inhalt des Datastore-Schnittstelle einfach zu halten - das heißt getThis()
, getThose()
, saveThat()
, updateThis()
, etc. Aber sobald ich kompliziertere Abfragen erfordern, es bricht. Die XMLFileDataStore-Klasse versteht SQL offensichtlich nicht, und die RDBMSDataStore-Klasse versteht XPath/XQuery offensichtlich nicht. Und OODBMSDataStore versteht abhängig von den verwendeten OODBMS etwas völlig anderes.
Ich könnte eine Sprache-unabhängige Objektabfragesprache adoptieren, schreibe alle meine Abfragen darin und lasse dann die konkreten Klassen sie in ihre Muttersprache übersetzen, aber das ist eine riesige Aufgabe, wenn ich vollständig sein will.
Gibt es Standards oder Best Practices für den Umgang mit dieser Art von Situation in Java? Leider scheint 99% der Welt "Datenbankunabhängigkeit" als "relationale Datenbankunabhängigkeit" zu interpretieren und ignoriert die Objektdatenbanken, XML-Datenbanken, Dokumentendatenbanken usw. gänzlich.