我当前的设计模式在单个便利类中包含大量数据库访问方法。当它被实例化时,它会抓取它所需的连接并等待方法。
我认为当我即将使用该连接运行10个方法时打开单个连接将比为10个单独方法中的每个方法打开和关闭该连接更好。
但是,我意识到我没有关闭任何这些连接。我得出的结论是,我必须返回并重构对该方法的所有调用,以包含一个closeConnections
方法,该方法将释放所有活动连接。
我的问题是:
我应该按照良好的设计实践打开和关闭每个方法中的连接(这会产生很大的开销),还是应该通过调用closeConnections
方法来重构对方便类的调用
伪码
class convenience{
public contructor(){
a = new Connection();
}
public void methodA(){
/* do stuff */
}
public void methodB(){
/* do stuff */
}
public void methodC(){
/* do stuff */
//should I do this?
a = new Connection();
/* do stuff */
a.close();
}
public void close(){
//or this
a.close();
}
}
答案 0 :(得分:1)
也许你不应该在这个便利类中保持连接,而是在每次方法调用时传递它。这样您就可以控制连接的生命周期,并且 - 例如 - 以有用的方式使用事务。
同样在这个便利类中保持这种连接会增加与多个线程共享连接的风险,这通常是不可取的。
通过使用c3p0,DBCP,BoneCP(和其他)等连接池,可以减轻/消除打开和关闭连接的成本。
答案 1 :(得分:0)
我建议无论何时打开连接,都应将其注册到服务中。如果特定连接已打开或已经关闭,您可以稍后检查服务,以便了解应用程序中的泄漏情况。
答案 2 :(得分:0)
遵循良好的设计实践
如果你想要,那么不要重新发明轮子。使用connection pool。