gpt4 book ai didi

python - 传播应用程序设置

转载 作者:太空宇宙 更新时间:2023-11-03 11:36:25 25 4
gpt4 key购买 nike

可能是一个很常见的问题,但还找不到合适的答案..

我有一个(带有 C++ 模块的 Python)应用程序,它大量使用 SQLite 数据库,它的路径由用户在应用程序启动时提供。

每当应用程序的某些部分需要访问数据库时,我计划获取一个新 session 并在完成后丢弃它。为此,我显然需要访问启动时提供的路径。我看到它发生的几种方式:

<强>1。明确的论点

数据库路径通过显式参数传递到任何需要的地方,并且数据库 session 使用该显式路径实例化。这可能是最模块化的,但似乎非常笨拙。

<强>2。数据库路径单例

数据库 session 对象看起来像:

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,除非我们使用工厂方法。此外,该方法可以执行诸如 session 缓存之类的操作。

还有其他我不知道的模式。我在网络框架中隐约看到了类似的东西,但我没有任何经验。我的示例非常具体,但我想它也会扩展到其他应用程序设置,因此是帖子的标题。

我想听听您对什么是最好的安排方式的想法。

最佳答案

是的,还有其他的。不过,您的选项 3 非常 Pythonic。

使用标准的Python模块来封装选项(这是像Django这样的网络框架的方式)

使用工厂发出正确配置的 session 。

既然 SQLite 已经有了一个“连接”,为什么不使用它呢?您的 DatabaseSession 类添加了哪些内置连接缺少的内容?

关于python - 传播应用程序设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/735337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com