0

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

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

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

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

在客户端级别,他们只是能够去ItemCollection items = new ItemCollection();并且不知道/控制连接的数据库。

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

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

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

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

4

3 回答 3

2

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

于 2010-03-11T05:36:45.417 回答
1

我觉得您的解释是明智的,并且您试图不将数据库详细信息和凭据暴露给客户端级别。

对于这种情况,您需要考虑任何可能对您有帮助的设计模式.

第二个选项,我想到的是使用休眠层,这将帮助您隐藏细节并仅访问 ORM 对象,您可以获得所需的内容。

于 2010-03-11T06:57:23.600 回答
1

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

  1. 您将能够即时切换数据库(实例或实现),而无需重新编译代码。
  2. You'll abstract the data source completely from it's implementation - allowing you to swap a database for a web service, queue implementation, or a stub.
  3. Decoupling your application in this way will make it easier to test.
于 2010-03-11T19:33:51.363 回答