매우 일반적인 질문,하지만 적절한 답을 찾을 수 없습니다 아직 .. 전파 응용 프로그램 설정 아마
I SQLite는 데이터베이스를 많이 사용하게하고 그 경로가 제공됩니다 응용 프로그램 A (C++ 모듈/w 파이썬)가 응용 프로그램 시작시 사용자가응용 프로그램의 일부가 데이터베이스에 액세스해야 할 때마다 새로운 세션을 가져 와서 삭제할 계획입니다. 이러한 일이 일어나기 위해서는 필자가 시작시 제공되는 경로에 액세스해야합니다.
데이터베이스 경로가 명시 적으로 매개 변수를 통해 할 필요가 사방에 전달되고 데이터베이스 세션이 명시 적 경로로 인스턴스화
1. 명시 인수 : 나는 일어나고 볼 수있는 방법의 커플입니다. 이것은 아마도 가장 모듈 식이지만 엄청나게 어색한 것으로 보입니다. 우리는 일정한 문자열을 저장하고 있기 때문에, 나는 덜 악한 싱글로이 고려
import foo.options
class DatabaseSession(object):
def __init__(self, path=foo.options.db_path):
...
:
2. 데이터베이스 경로 싱글
데이터베이스 세션 객체는 같을 것이다 응용 프로그램 런타임 중에는 변경되지 않습니다. 따라서 기본 및 단위 테스트를 재정의 할 수 있습니다. 필요한 경우 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
에 의존하지 않는다 팩토리 메서드를 사용합니다. 또한이 메서드는 세션 캐싱 또는 기타 등의 작업을 수행 할 수 있습니다.
그리고 다른 패턴이 있습니다. 그 패턴은 제가 모릅니다. 나는 막연하게 웹 프레임 워크에서 비슷한 것을 보았지만 그 경험이 없다. 내 예제는 매우 구체적이지만 다른 응용 프로그램 설정, 즉 게시물 제목으로도 확장된다고 생각합니다.
나는 이것을 정리하는 가장 좋은 방법에 대한 생각을 듣고 싶습니다.
분명히 밝혀 지겠지만, foo.options는 db_path를 싱글 톤으로 정의합니까? –