设计DAO以访问多个相同的数据库

时间:2014-09-18 07:55:32

标签: design-patterns dao data-access-layer multiple-databases

我目前正在设计一个应该访问多个设备并收集各种数据的应用程序。数据存储在数据库(每个设备一个数据库)内,尽管有数据本身,但它们完全相同(表,视图,函数,存储过程......)。 ;) 最多可以有10个设备可以在运行时连接或断开连接。

现在的问题是,如何设计数据访问层?目前我正在考虑两种方法:

      
  1. 每个设备一个DAO,产生1..10个实例,每个实例保存连接信息(有状态)。
  2.   
  3. 单个DAO,通过每个方法调用(无状态)接收连接信息来访问所有设备。

应用程序应该是多线程的(并发数据库访问),而性能并不重要,这意味着代码中的某些锁是可以接受的。只有用户按需访问设备。由于我来自RESTful Webservices生活方面,我现在偏爱选项2,因为它是无状态的。

2 个答案:

答案 0 :(得分:0)

首先想到的是为什么不将所有数据存储在一个数据库中并创建一个"设备"用于区分每台设备数据的表格?但这不是你的问题,我打赌你有充分的理由。

就个人而言,我创建了一个工厂,它根据设备返回正确的DAO' (设备编号?)。然后,DAO必须已经知道连接信息,因此如果您使用Hibernate或其他ORM,我将使用DAO存储/配置它,或者为每个数据库注入会话工厂。

使用无状态解决方案,您只是在解决问题'将连接/数据库信息存储到其他位置。我认为信息在概念上最适合DAO或会话工厂。

答案 1 :(得分:0)

我认为数据库连接详细信息应该是静态的,并且可以在属性文件中维护。

使用一个DAO(我假设在运行时你会知道"设备类型"需要获取哪些数据),你可以按照以下方式来满足你的要求:

1)将数据库连接详细信息保存在属性文件中。

2)使用"设备类型"从属性文件中获取连接详细信息。

3)制作" getConnection()"如此通用,你只需将连接细节(在步骤2中获取)传递给它,它就会返回你可以用来获取所需数据的连接。

相关问题