我想知道在多线程应用中是否有批准的做法。我应该每个线程有一个DAO还是简单地使一个DAO成为一个线程安全的单例。
答案 0 :(得分:4)
这实际上很大程度上取决于您用于数据访问的机制。如果您具有非常可扩展的数据访问和大量线程,则使用某种形式的线程静态数据访问可能是有利的。
如果您没有可扩展的数据访问权限,那么您的提供程序不支持每个进程多个线程,或者您此时不需要可伸缩性,使用具有适当同步的单例更简单,更容易实现。
对于大多数商业风格的应用程序,我个人认为单例方法更容易维护,而且可能更好 - 如果没有其他原因,那么更容易有效地进行测试。可能不需要具有多个用于数据访问的线程,因为数据访问可能不会成为影响可用性的瓶颈(如果您正确设计,并且适当地批量请求)。
答案 1 :(得分:0)
使用最适合您的应用程序架构的方法,除非:
1)您的数据访问对象创建起来很昂贵,在这种情况下,您应该依赖于线程安全的单例。
2)您的对象保持可变状态,如Active Record pattern中所示。 (不可变的DAO配置状态,如超时阈值,不计算在内。)