2012-02-23 2 views
0

일부 클래스에서 사용해야하는 큐가 있습니다.전역 변수에 싱글 톤을 사용하는 것보다 더 좋은 아이디어

모든 클래스에 대해 동일한 큐이므로 정적 멤버로 정적 클래스에 큐를 놓을 것입니다. 하지만 이건 좋지 않은 OOP가 아니라는 것을 이해합니다. (비록 싱글 톤이 디자인 패턴 중 하나라고 생각하지만) 그래서이 큐를 구현하기위한 아이디어가 필요합니다. 모든 클래스에 고유하고 액세스 가능해야합니다. 모든 클래스가 동일한 큐를 사용하기 때문입니다.

+1

IoC 컨테이너를 사용하고 있습니까? –

+0

Queue (또는 ConcurrentQueue)가 포함 된 singletone 클래스를 만들고 클래스에 필요한 모든 기능을 노출합니다. – Maxim

답변

2

여러분이 말한 것은 클래스가 일부 컨텍스트를 공유하며이 컨텍스트에는 하나의 큐가 포함되어 있다는 것입니다. 클래스가이 컨텍스트에 의존한다고 말할 수 있습니다.

싱글 톤 패턴이 좋지 않은 이유는 글로벌 (정적) 컨텍스트를 공통 컨텍스트로 사용하기 때문입니다. 이 두 가지 이유로 제한된다

  1. 분명 클래스의 종속성을 쉽게 식별 할 수없고, 따라서 (예 : 단위 테스트 환경으로) 서로 다른 환경에서 그들을 설정하는 것은 쉽지 않다.

  2. 이 컨텍스트의 두 인스턴스가 나란히 실행되도록하는 것은 완전히 불가능합니다.

따라서 간단한 해결책은 컨텍스트 클래스 내에 모든 클래스의 종속성을 넣은 다음 모든 클래스를이 클래스의 인스턴스와 연결하는 것입니다.

또 다른 고급 솔루션은 종속성 삽입 프레임 워크를 사용하는 것입니다.

+0

DI 프레임 워크는 제안 된 솔루션보다 덜 복잡하다고 주장 할 것입니다. 확실한. 파악하는 새로운 개념이지만 깨끗한 코드를 생성합니다. – jgauffin

1

프로그램의 모든 클래스와 레이어에서 전역 적으로 볼 수 있으므로이 프로그램을 싱글 톤으로 만들지는 않겠습니다. 큐에 액세스해야하는 파트에 큐 자체에 대한 참조를 제공하십시오. 따라서 소프트웨어의 어느 부분에서 소프트웨어에 액세스 할 수 있는지 명확하게 결정할 수 있습니다.

나는 야생의 방식으로 소프트웨어의 어떤 부분에서 사용 되었기 때문에 "XyzManager"라고 불리는 너무 많은 싱글 톤을 가진 소프트웨어 프로젝트에서 매우 나쁜 경험을했습니다. 가능한 경우 전역 변수 및 싱글 톤을 피하십시오. 객체에 대한 참조가 액세스해야하는 객체에 대한 참조를 제공하는 것이 좋습니다.

관련 문제