每个线程一个DAO或线程安全DAO?

时间:2010-01-04 17:57:30

标签: dao

我想知道在多线程应用中是否有批准的做法。我应该每个线程有一个DAO还是简单地使一个DAO成为一个线程安全的单例。

2 个答案:

答案 0 :(得分:4)

这实际上很大程度上取决于您用于数据访问的机制。如果您具有非常可扩展的数据访问和大量线程,则使用某种形式的线程静态数据访问可能是有利的。

如果您没有可扩展的数据访问权限,那么您的提供程序不支持每个进程多个线程,或者您此时不需要可伸缩性,使用具有适当同步的单例更简单,更容易实现。

对于大多数商业风格的应用程序,我个人认为单例方法更容易维护,而且可能更好 - 如果没有其他原因,那么更容易有效地进行测试。可能不需要具有多个用于数据访问的线程,因为数据访问可能不会成为影响可用性的瓶颈(如果您正确设计,并且适当地批量请求)。

答案 1 :(得分:0)

使用最适合您的应用程序架构的方法,除非:

1)您的数据访问对象创建起来很昂贵,在这种情况下,您应该依赖于线程安全的单例。

2)您的对象保持可变状态,如Active Record pattern中所示。 (不可变的DAO配置状态,如超时阈值,不计算在内。)