2010-06-22 5 views
3

나는 어리 석음으로 처음 추가 한 싱글 톤을 제거하는 가장 좋은 방법에 대해 생각하면서 머리를 긁적니다. 배경 지식으로이 애플리케이션은 주식 포트폴리오 추적자입니다.싱글 톤 클래스를 컨텍스트 유형으로 변환

  1. 가격
  2. 포트폴리오 (클래스 관리 포트폴리오의 모음 (클래스가 역사 가격, 배당금, 분할의 목록을 잡고) : 나는 현재 내가 유일한 인스턴스가 될 것이라고 생각 세 가지 클래스가 일부 유용한 래퍼 함수)
  3. 쿼리 개체 (읽고
)를 데이터베이스에 기록하는 클래스

사용자 요청을 충족하기 위해 여러 데이터베이스에서 열고 저장할 수있는 기능을 추가하고 있습니다. 각 데이터베이스 (쿼리 클래스)는 이론적으로 포트폴리오 및 가격 생성자로 전달되어 데이터를로드합니다.

내가 직면 한 문제는 모든 3 개의 클래스가 서로 연결되어 있다는 것입니다. C : \ database1.sqlite를 열면 C : \ database2.sqlite의 가격과 포트폴리오를 섞어서 비교할 수 없습니다. 또한 모든 편집 내용을 적절한 데이터베이스에 저장해야합니다.

필자의 초기 생각은이 클래스들로 구성된 컨텍스트 개체를 생성하고 이것을 전달하는 것이다. 그러나, Can you explain the Context design pattern?을 읽는 것, 이것이 올바른 해결책이라고 생각하지 않습니다.

싱글 톤을 제거하지만 개체간에 무결성을 유지하려면 어떻게해야합니까? 감사.

+2

쿼리 레이어에 가격 또는 포트폴리오 클래스에 대한 연결이있는 경우 디자인에 심각한 문제가 있습니다. 아마 너무 늦었다는 것을 알고 있지만, Singleton 패턴의 사용에 관계없이 디자인에 근본적인 결함이있는 것 같습니다. – Serapth

+0

이 "컨텍스트 패턴"이 무엇을 생각하든, 당신이 인용 한 질문의 링크는 죽었으며 패턴은 Google 검색에 표시 될 정도로 인기가 없습니다. 이상한 상호 의존성을 해결하고 나면 상위 수준에서 개체를 인스턴스화하고 개체가 필요한 모든 개체에 참조를 전달합니다. –

+0

Serapth, 쿼리 레이어는 가격 클래스 또는 포트폴리오 클래스를 알지 못하지만 가격 및 포트폴리오 클래스는이를 사용하여 데이터베이스를로드하고 데이터베이스에 저장합니다. – Matt

답변

2

"복수형"에서 "단수형"으로 변경하기 위해 어떤 변화를 주 었는지 생각해 보겠습니다. 당신의 물체가 어떤 것보다 일이라면 당신의 시스템을 추론하는 것이 훨씬 더 쉬울 것입니다.

예.

typedef std::vector<Price> Prices; 
typedef std::vector<Portfolio> Portfolios; 
typedef std::vector<Query> Queries; 

하지만 내 소견은 아마 당신이이 일의 단일 인스턴스간에 원하는 상호 작용을 해결 한 다음에 가야한다는 것입니다 :

class Price; 
class Portfolio; 
class Query; 

필요한 경우, 당신은 항상 나중에 추가 할 수 있습니다 (즉, 한 클래스의 인스턴스가 다른 클래스의 여러 인스턴스를 참조 할 수 있습니까?). 그런 다음이를 명시 적으로 정의 할 수 있습니다.

기본적으로 상호 작용에 대한 추론을 간단하게하려고 노력합니다. 가격 및 포트폴리오의 수는 많지만 한 인스턴스에서 작동하는 작업과 여러 인스턴스에서 작동하는 작업을 염두에두기가 너무 어렵 기 때문에 이러한 차이를 분리하고 간단한 인스턴스를 간단하고 분명하게 유지하십시오.