好的,我正在设计一个独立的 Web 服务(使用 RestLET 作为我的框架)。我的应用程序分为 3 层:

  • 数据层 (就在数据库之上,提供用于连接/查询数据库的API,以及数据库对象)
  • 对象层 (负责从数据层进行序列化...提供客户端层可以使用的对象,而无需担心数据库)
  • 客户端层 (这一层是RestLET Web服务......基本上只是从对象层创建对象并满足Web服务请求)

现在,对于我在对象层中创建的每个对象,我想使用不同的凭据(这样我就可以对每个对象进行沙箱处理...)。对象层不应该知道确切的凭据(即登录/密码/数据库 URL 等)。

管理这个问题的最佳方法是什么?我想我的数据层中应该有一个超类数据库对象......每个子类将包含所需的登录信息......这样我的对象层就可以了 Database db = new SubDatabase(); 然后继续使用该数据库。

在客户层面,他们可以 ItemCollection items = new ItemCollection(); 并且不知道/控制所连接的数据库。

我问这个问题是因为我试图使我的平台可扩展,以便其他人可以轻松地在我的平台上创建服务。

如果有人对这些架构问题或如何管理此类事情有任何经验,我将不胜感激任何见解或建议......

如果这令人困惑,请随时提问。谢谢!

我的平台是Java,我使用的REST框架是RestLET,我的数据库是MySQL。

有帮助吗?

解决方案

我觉得你的解释是明智的,你试图不向客户级别公开数据库详细信息和凭据。

在这种情况下,您需要考虑任何可能帮助您的设计模式,我可以想到Singleton模式,您可以在其中创建一个实例并在对象层中使用它,从而避免向用户显示有关信条和URL的任何详细信息。

第二个选项,我想到的是使用 hibernate 层,它将帮助您隐藏细节并仅访问 ORM 对象,您就可以获得您正在寻找的内容。

其他提示

我的建议是使用 JTA,您可以使用多个数据库以及相应数量的数据源。你可以参考这里了解更多信息 https://test.kuali.org/confluence/display/KULRICE/Datasource+and+JTA+Configuration

我会回应@saugata 的评论。看着 春天 并将数据源实现(或用于测试的存根!)注入到 Spring 配置中的对象层。这应该可以通过多种方式帮助您的整体应用程序架构:

  1. 您将能够动态切换数据库(实例或实现),而无需重新编译代码。
  2. 您将从数据源的实现中完全抽象出来 - 允许您将数据库替换为 Web 服务、队列实现或存根。
  3. 以这种方式解耦您的应用程序将使测试变得更容易。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top