可能是一个非常普遍的问题,但找不到合适的答案了..传播应用程序设置
我有一个(Python的W/C++模块)的应用,使大量使用SQLite数据库和它的路径被供应由用户在应用程序启动时进行。
每次应用程序的某些部分需要访问数据库时,我计划获取一个新的会话并在完成时放弃它。要做到这一点,我显然需要访问启动时提供的路径。
1.明确论点
数据库路径传递到处它需要通过一个明确的参数和数据库会话实例化与明确的路径:的,我看到它发生的方式夫妇。这也许是最模块化的,但似乎令人难以置信的尴尬。
2.数据库路径单
数据库会话对象将是这样的:
import foo.options
class DatabaseSession(object):
def __init__(self, path=foo.options.db_path):
...
我认为这是较小的恶单,因为我们只存储常量字符串,在应用程序运行时期间不会更改。这样可以覆盖默认值,并且如果需要,可以测试DatabaseSession
类。
3.数据库路径单+静态工厂方法
在上面也许略有改善:
def make_session(path=None):
import foo.options
if path is None:
path = foo.options.db_path
return DatabaseSession(path)
class DatabaseSession(object):
def __init__(self, path):
...
这样的模块不依赖于foo.options
可言,除非我们使用工厂方法。此外,该方法可以执行像会话缓存或什么的东西。
然后还有其他模式,我不知道。我在Web框架中隐约看到了类似的东西,但我对这些东西没有任何经验。我的例子非常具体,但我想它也扩展到其他应用程序设置,因此文章的标题。
我想听听你的想法,最好的安排方式是什么。
只是要清楚,foo.options是否将db_path定义为单例? – 2011-03-01 20:14:57