2009-04-09 4 views
4

매우 일반적인 질문,하지만 적절한 답을 찾을 수 없습니다 아직 .. 전파 응용 프로그램 설정 아마

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에 의존하지 않는다 팩토리 메서드를 사용합니다. 또한이 메서드는 세션 캐싱 또는 기타 등의 작업을 수행 할 수 있습니다.

그리고 다른 패턴이 있습니다. 그 패턴은 제가 모릅니다. 나는 막연하게 웹 프레임 워크에서 비슷한 것을 보았지만 그 경험이 없다. 내 예제는 매우 구체적이지만 다른 응용 프로그램 설정, 즉 게시물 제목으로도 확장된다고 생각합니다.

나는 이것을 정리하는 가장 좋은 방법에 대한 생각을 듣고 싶습니다.

+0

분명히 밝혀 지겠지만, foo.options는 db_path를 싱글 톤으로 정의합니까? –

답변

2

예, 다른 것들도 있습니다. 당신의 선택 3은 매우 Pythonic입니다.

제대로 구성 세션을 방출하는 공장을 사용합니다 (이 장고와 같은 방식의 웹 프레임 워크는 그것을 할 것입니다) 옵션을 캡슐화하는 표준 파이썬 모듈을 사용합니다.

SQLite에는 이미 "연결"이 있으므로 사용하지 않으시겠습니까? DatabaseSession 클래스에서 기본 제공 연결이 없다고 추가하면 어떻게됩니까?

+0

의견을 보내 주셔서 감사합니다. 예제를 단순화하기 위해 "데이터베이스 세션"이라는 용어를 사용했습니다. 실제로는 데이터베이스에서 청사진을 가져 오는 객체 팩토리와 비슷합니다. –

관련 문제