我应该直接从每个类的方法中访问全局db对象吗?或者从每个方法,我应该实例化db对象的实例?
我的一个数据库对象根据所访问信息的ID而变化,因此它是通过函数connectToDatabase(id)创建的。我应该将它作为一个全局函数,让它返回一个数据库对象并从每个方法或其他东西实例化它?
感谢。
答案 0 :(得分:2)
在这种情况下,和其他许多人一样,我更喜欢dependency injection:让你的类(例如在__init__
中)接受数据库连接作为参数。
这使得测试变得更容易和更清晰,让您可以根据需要切换策略(例如,如果您发现一次创建过多的数据库连接,则转移到“数据库连接池”策略),并分配责任更准确,更灵活。
总的来说,我认为依赖注入可能是伟大的“Gang of 4”一书中没有列出的最重要的设计模式! - )
答案 1 :(得分:1)
SQLAlchemy建议创建会话的函数是全局的。
http://www.sqlalchemy.org/docs/reference/orm/sessions.html#sqlalchemy.orm.sessionmaker
这是sessionmaker()的意图 函数在全局范围内调用 申请范围和 返回课程可供使用 其余的应用程序作为 用于实例化的单个类 会话。