【问题标题】:How to shield a DB?如何屏蔽数据库?
【发布时间】:2013-03-29 17:37:37
【问题描述】:

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

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

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

我担心通过 REST 访问可能会很慢。 该技术最好是基于Java的。但是,也欢迎 C-base 等。

我想知道:我应该考虑哪些 REST 替代方案? 除了访问速度之外,唯一的要求是它必须易于实施和维护。

非常感谢您的建议。

【问题讨论】:

    标签: java database api architecture data-access-layer


    【解决方案1】:

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

    从较新的技术来看,Google protocol buffers 可能不适合这项任务。

    【讨论】:

      【解决方案2】:

      如果您想从数据模型中屏蔽您的领域模型,您可以在两者之间放置一个抽象层,即接口。为什么你认为你需要一个远程边界?通过 REST 提供可远程访问的 API 与您消除域和数据模型之间耦合的担忧完全无关。

      无论如何,您的 API 使用者将始终不受您的私有域模型的影响。如果您正在构建一个 java API,您将公开接口,并且使用远程和正交 REST 接口,您将公开 HTTP 资源。

      【讨论】:

      • 问题中可能不清楚,但我的语义需要远程访问。因此,“...通过 REST 提供可远程访问的 API 与您所关心的完全正交...”是不准确的。你有什么具体的建议或者只是一个关于“只是放一个抽象层......”的一般性陈述,这并没有多大贡献(IMO)?
      • 如果您想要一个具体的答案,我建议您更清楚、更详细地提出问题。 API 的目的是什么?谁是它的消费者?例如,如果 API 需要满足不同类型的客户端,我会选择 REST。如果所有客户端都是 Java,并且我愿意在更改 API 时将自己锁定并处理为客户端重新捆绑二进制文件的痛苦,那么我可以选择 Java RMI。这些选择是上下文相关的,必须谨慎选择。我给出了一个一般性建议,以推动您朝着正确的方向前进并让您思考问题。
      • 我编辑了我的问题以强调我的语义需要远程访问并且 API 是 CRUD 的事实。我相信现在您的答案也可以更具体。
      猜你喜欢
      • 2016-02-27
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-30
      • 1970-01-01
      相关资源
      最近更新 更多