我有一个Model
课程,这是我自制的ORM的一部分。它有各种方法,如save()
,create()
等。现在,问题在于所有这些方法都需要连接对象才能正常运行。我不知道用连接对象提供Model
对象的最佳方法是什么。
到目前为止我的意思是:
Model
的{{1}}中提供连接对象;这将通过设置实例变量并在整个方法中使用它来工作,但它会破坏API;用户在创建__init__()
对象时不应始终提供连接对象; Model
的{{1}}上获取存储位置的连接并将其放在实例变量中(这就是我认为这是最好的方法,但不知道存储该连接对象的最佳位置); Model
的{{1}}上从连接池中获取连接(我如何知道要从池中获取哪个连接? )。如果有任何其他问题,请告诉我们。另外,我想知道哪种方法是正确的。
答案 0 :(得分:1)
以下是我的行为:
使用带有队列接口的连接池。您不必选择连接对象,只需选择下一行即可。这可以在您需要交易时完成,然后再回来。
除非你有一些非常具体的需求,否则我会使用Singleton类进行数据库连接。无需每次都在构造函数上传递参数。
为了进行测试,您只需在Singleton类上放置一个模拟的数据库连接。
编辑:
关于连接池问题(我可能在这里错了,但这将是我的第一次尝试):
保持所有连接处于打开状态。 Pop
当您需要时,put
当您不再需要它时,就像常规队列一样。此队列可以从Singleton公开。
您从固定的默认连接数开始(如20)。您可以覆盖pop
方法,因此当队列为空时,您阻止(如果程序是多线程的,则等待另一个释放)或者动态创建新连接。
破坏连接更加微妙。您需要跟踪程序使用的连接数,以及连接过多的可能性。请注意,因为破坏以后需要的连接会降低程序的速度。最后,它是一个改变性能特征的启发式问题。