假设我有一个应用程序,理想情况下应该能够使用关系数据库、对象数据库、XML 文件或其他任何东西来保存其数据。本着对接口而不是实现进行编码的精神,我有一个通用的 DataStore 接口,它为涉及数据存储的所有 I/O 指定了一个协定。该接口可以通过RDBMSDataStore、OODBMSDataStore、XMLFileDataStore等具体类来实现。
只要我保持 DataStore 接口的内容简单(即getThis()
、getThose()
、saveThat()
、updateThis()
等),这种方法就可以很好地工作。但是一旦我需要更复杂的查询,它就会崩溃。XMLFileDataStore 类显然不理解 SQL,RDBMSDataStore 类显然不理解 XPath/XQuery。OODBMSDataStore 根据使用的 OODBMS 理解完全不同的东西。
我可以采用一种独立于语言的对象查询语言,用它编写所有查询,然后让具体的类将它们翻译成它们的母语,但如果我想完整的话,这是一项艰巨的任务。
在 Java 中处理这种情况是否有标准或最佳实践?不幸的是,似乎世界上 99% 的人将“数据库独立性”解释为“关系数据库独立性”,而完全忽略了对象数据库、XML 数据库、文档数据库等。