0

我当前的设计模式在单个便利类中包含大量数据库访问方法。当它被实例化时,它会抓取它需要的连接并等待方法。

我的想法是,当我要使用该连接运行 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();
    }
}
4

3 回答 3

1

也许您不应该在这个便利类中保留连接,而是在每次方法调用时将其传递。这样,您将能够控制连接的生命周期,并且 - 例如 - 以有用的方式使用事务。

将此连接保留在此便利类中也会增加与多个线程共享连接的风险,这通常是不可取的。

通过使用像 c3p0、DBCP、BoneCP(和其他)这样的连接池,可以减轻/消除打开和关闭连接的成本。

于 2012-04-18T18:18:41.487 回答
0

我建议无论何时打开连接,都应该将其注册到服务中。然后,您可以稍后与服务检查特定连接是否已打开或已关闭,以处理应用程序中的泄漏。

于 2012-04-18T18:24:06.020 回答
0

遵循良好的设计实践

如果你想要,那么不要重新发明轮子。使用连接池

于 2012-04-18T18:28:18.543 回答