理想的には、リレーショナル データベース、オブジェクト データベース、XML ファイルなどを使用してデータを永続化できるアプリがあるとします。実装ではなくインターフェイスにコーディングするという精神で、データ ストアに関連するすべての I/O のコントラクトを指定する汎用 DataStore インターフェイスを用意しました。このインターフェースは、RDBMSDataStore、OODBMSDataStore、XMLFileDataStore などの具象クラスによって実装できます。
getThis()
これは、DataStore インターフェースの内容を単純に ( 、getThose()
、saveThat()
、など)維持している限りうまく機能しますupdateThis()
。しかし、より複雑なクエリが必要になるとすぐに機能しなくなります。XMLFileDataStore クラスは明らかに SQL を理解せず、RDBMSDataStore クラスは明らかに XPath/XQuery を理解していません。また、OODBMSDataStore は、使用している OODBMS によってまったく異なるものを理解します。
言語に依存しないオブジェクト クエリ言語を採用し、その言語ですべてのクエリを記述し、具象クラスにそれらを母国語に翻訳させることもできますが、完全にしようとすると、それは大きな作業になります。
Java でこの種の状況を処理するための標準またはベスト プラクティスはありますか? 残念ながら、世界の 99% は "データベースの独立性" を "リレーショナル データベースの独立性" と解釈し、オブジェクト データベース、XML データベース、ドキュメント データベースなどを完全に無視しているようです。