2010-03-11 69 views
0

好吧,我正在设计一个独立的Web服务(使用RestLET作为我的框架)。我的应用程序被分成在〜3层:如何在应用程序中组织和管理多个数据库凭证?

  • 数据层(就在数据库的上方,提供API用于连接/查询数据库,和一个数据库对象)
  • 对象层(负责串行化从数据层...提供客户端层可以使用的对象而不用担心数据库)
  • 客户端层(该层是RestLET Web服务...基本上只是从对象层创建对象并实现web服务请求)

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

什么是最好的管理方式?我在想,我的数据层应该有一个超级类型的数据库对象......并且每个子类都将包含所需的登录信息......这样,我的对象层可以去Database db = new SubDatabase();,然后继续使用该数据库。

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

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

如果任何人有这些建筑问题或如何的经验来管理这样的事情我会很感激任何见解或意见...

随意问的问题,如果这是令人困惑的。谢谢!

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

+1

如果您使用Spring或任何应用程序服务器,则可以分别配置bean和数据源。您的DAO可以注入或查找相同的内容。如果你编程接口,而不是使用任何数据库特定的功能,那么它会正常工作。 – saugata 2010-03-11 05:42:00

回答

1

我觉得你解释是明智的,你想不暴露数据库信息和凭据cleint水平。

对于这种情况,您需要考虑可能对您有帮助的任何设计模式。 我可以考虑创建一个实例并在Object层中使用它的单例模式,从而避免显示有关credentails的任何细节和用户的URL。

第二个选项,我在脑海里想到的是使用hibernate层,它可以帮助你隐藏细节并访问ORM对象,你可以得到你正在寻找的东西。

1

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

  1. 您将能够在不使用代码重新编译的情况下即时切换数据库(实例或实现)。
  2. 您将完全从其实现中抽象出数据源 - 允许您为Web服务,队列实现或存根交换数据库。
  3. 以这种方式解耦您的应用程序将使其更容易测试。
相关问题