Java 如何屏蔽数据库?

Java 如何屏蔽数据库?,java,database,api,architecture,data-access-layer,Java,Database,Api,Architecture,Data Access Layer,我必须提供对我的语义的访问。目前,它是一个RDBMS,但稍后我可能会使用其他非RDBMS数据源graph、hadoop等 my semantics的使用者位于公司域/内部网内,但在远程服务器上运行。此外,由于我们处于设计阶段,不清楚他们将使用什么技术来实现业务逻辑Java/C或其他。 我认为,通过JDBC/ODBC向软件的外部模块提供对我的数据模型的直接访问是个坏主意,因为我不想只致力于RDBMS 计划是创建一个API来访问我的语义。API基本上是CRUD。目前的候选者是使用Spring的RES

我必须提供对我的语义的访问。目前,它是一个RDBMS,但稍后我可能会使用其他非RDBMS数据源graph、hadoop等

my semantics的使用者位于公司域/内部网内,但在远程服务器上运行。此外,由于我们处于设计阶段,不清楚他们将使用什么技术来实现业务逻辑Java/C或其他。 我认为,通过JDBC/ODBC向软件的外部模块提供对我的数据模型的直接访问是个坏主意,因为我不想只致力于RDBMS

计划是创建一个API来访问我的语义。API基本上是CRUD。目前的候选者是使用Spring的RESTAPI

我担心的是,与REST相比,访问速度可能较慢。 最好是基于Java的技术。不过,C-base和其他产品也很受欢迎

我想:我该考虑什么休息? 除了访问速度之外,唯一的要求是它必须易于实现和维护


非常感谢您的建议。

对于公司防火墙后面的内部调用,RMI将允许使用多个方法创建任意复杂的API,这些方法接受并返回复杂的数据结构。CORBA也可以。这些技术是JavaSE的一部分


从较新的技术来看,这可能不坏。

如果您想将域模型与数据模型隔离开来,您可以在两者之间添加一层抽象,即接口。为什么你认为你需要一个远程边界?通过REST提供远程可访问的API与消除域和数据模型之间耦合的问题完全是正交的


无论如何,API的使用者将始终与您的私有域模型隔离。如果您正在构建一个java API,那么您将公开接口,使用远程和正交的REST接口,您将公开HTTP资源。

这个问题可能不清楚,但我的语义需要远程访问。因此,…通过REST提供远程可访问的API与您的关注完全正交。。。这是不准确的。你有什么具体的建议或只是一个一般性的声明只是把抽象层。。。如果你想要一个具体的答案,我建议你更清楚、更详细地回答这个问题。API的用途是什么?谁是它的消费者?例如,如果API需要满足不同类型的客户端,我会选择REST。如果所有客户机都是Java,并且我愿意在更改API时锁定自己并处理为客户机重新绑定二进制文件的痛苦,那么我可以选择JavaRMI。这些选择是基于上下文的,必须谨慎对待。我给出了一个一般性的建议,让您朝着正确的方向前进,让您思考这个问题。我编辑了我的问题,以强调我的语义需要远程访问,并且API是CRUD。我相信现在你的回答也可以更具体一些。