假设我有一个理想情况下应该能够使用关系数据库,对象数据库,XML文件或其他任何东西来保存其数据的应用程序。本着编码接口而不是实现的精神,我有一个通用的DataStore接口,它指定涉及数据存储的所有I / O的合约。此接口可以通过具体类实现,例如RDBMSDataStore,OODBMSDataStore,XMLFileDataStore等。
只要我保持DataStore接口的内容很简单 - 即getThis()
,getThose()
,saveThat()
,updateThis()
等,这就行得很好。但是我需要更复杂的查询,它会崩溃。 XMLFileDataStore类显然不了解SQL,而RDBMSDataStore类显然不了解XPath / XQuery。 OODBMSDataStore根据使用的OODBMS了解完全不同的东西。
我可以采用与语言无关的对象查询语言,在其中编写我的所有查询,然后让具体的类将它们翻译成他们的母语,但如果我想完成,这是一项艰巨的任务。
在Java中处理这种情况是否有标准或最佳实践?不幸的是,世界上99%的人似乎都将“数据库独立性”解释为“关系数据库独立性”,并完全忽略了对象数据库,XML数据库,文档数据库等。
答案 0 :(得分:0)
从我阅读问题的方式来看,这听起来很像Hibernate为Java带来的语义。它甚至具有处理XML作为内容后备存储的模式(使用Dom4J)。 Hibernate API有许多扩展点,可以允许添加OODBMS模型。即使Hibernate不是最适合您的解决方案(实现方式),我认为它提供了一个很好的例子,可以用来解决您提出的问题。