におそらく非常に一般的な質問の伝播が、私はSQLiteのデータベースを多用して、そのパスを供給します(PythonのC++モジュール/ w)のアプリケーションを持って、適切な答えはまだ..は、アプリケーションの設定
を見つけることができませんでしたアプリケーションの起動時にユーザーによって
アプリケーションの一部がデータベースにアクセスする必要があるたびに、私は新しいセッションを取得し、完了すると破棄します。それが起こるには、私は明らかに起動時に提供されたパスにアクセスする必要があります。私はそれが起こって見る方法のカップル:
1.明示的な引数
データベース・パスは、それが明示的なパスでインスタンス化された明示的なパラメータとデータベースセッションを介してである必要がどこにでも渡されます。これはおそらく最もモジュラーですが、信じられないほど厄介なようです。我々は唯一の定数文字列を格納しているので、私は、これはあまり悪シングルトンであると考えて
import foo.options
class DatabaseSession(object):
def __init__(self, path=foo.options.db_path):
...
、:
2.データベース・パスシングルトン
は、データベースのセッションオブジェクトは次のようになります。アプリケーション実行時には変更されません。これにより、必要に応じてDatabaseSession
クラスのデフォルトおよびユニットテストをオーバーライドすることが可能になります。上記オーバー
3.データベース・パスシングルトン+ staticファクトリメソッド
おそらく若干の改善:私たちがしている場合を除き
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
に依存しませんファクトリメソッドを使用します。さらに、このメソッドはセッションキャッシュなどのようなものを実行できます。
他のパターンがありますが、わかりません。私は網の枠組みの中でぼんやりと似たものを見ましたが、私はそれらの経験がありません。私の例は非常に具体的ですが、私はそれが他のアプリケーションの設定、つまり投稿のタイトルにも拡張されていると思います。
私は、これを配置する最良の方法が何であるかについてのあなたの考えを聞きたいと思います。
foo.optionsはdb_pathをシングルトンとして定義していますか? –