2011-08-23 5 views
5

일부 특정 기능을 처리하고 수명이 응용 프로그램 자체와 동일하며 프로그램의 많은 부분에서 사용되도록하는 클래스가있는 응용 프로그램이 있습니다. 이 마지막 이유 때문에 나는 그들을 서비스라고 부릅니다. 예를 들어, 오디오 서비스는 오디오 파일을 재생하고 오디오와 관련된 많은 다른 작업을 수행합니다.서비스에 대한 싱글 톤/정적 클래스

Theese 클래스는 응용 프로그램 시작시 한 번만 인스턴스화되며 형식 당 둘 이상을 갖는 것은 의미가 없습니다.

그래서 여기에 싱글 톤에 대한 많은 답변을 읽었으므로 사용법이 권장되지 않는 곳에서 필요한 경우 해당 서비스에 대한 참조를 전달합니다. 프로젝트가 성장함에 따라 나는 자신의 생성자에 대한 서비스 참조가 필요한 많은 클래스와 경우에 따라 모든 서비스 참조 추가를 피하기 위해 해당 서비스에 대한 외관까지 필요로합니다.

내가 잘못하고 있다고 생각합니다. 이 정적/싱글 톤 클래스에 대한 좋은 사용되어야한다고 생각합니다.

올바른 방법입니까?

답변

1

스프링을 소개하는 답변이 하나 있습니다. 커버 아래에서, Spring은 여전히 ​​필요한 곳에이 참조를 전달합니다.

새로운 프레임 워크를 앱에 도입하는 대신 왜 Singleton을 사용하지 않는 것이 좋을까요? 서비스 레퍼런스를 전달하는 것보다 일을하고 관리하기가 더 쉽다면 사용하는 것이 좋습니다.

테스트 가능성에 대한 영향 때문에 싱글 톤에 대한 우려가있는 경우 Dependency Injection (프레임 워크가 아닌 패턴)을 사용하여 구현에 대한 연결을 감소시킵니다.

2

일부 자동 배선 기능이있는 종속성 주입 컨테이너가 필요합니다. Java를 사용하는 경우 Spring을 예로 들어보십시오.

0

실제로 Singleton은 응용 프로그램 수명주기 동안에 만 한 번만 만들어야하는 개체를 나타냅니다. 이 객체에는 실제로 고정 된 설정 중 일부가 포함되어 있습니다. html 만 구문 분석하기위한 파서 클래스가 있다고 가정 해 보겠습니다. HTML의 루트는 ""태그 여야합니다. 또한 클래스의 모든 인스턴스가 동일한 작업을 수행하므로이 파서 클래스에서 인스턴스로드를 생성하지 않으려합니다. 인스턴스에 html 문자열이 생기고 X가 다시 나타납니다. 클래스가 한 번에 한 가지만 수행한다고 생각되면 싱글 톤으로 이동할 수 있습니다. 그러나 예를 들어, 오디오 서비스가 한 번에 다른 오디오를 재생해야한다고 말하면 클래스의 인스턴스를 만드는 것이 싱글 톤으로 만드는 것보다 낫습니다.

0

나는 MikeG에 동의합니다. 싱글 톤을 사용하십시오. 이 수업은 대부분 서비스 지향적이라고 저는 말하기 때문에 어떤 문제도 일으키지 않을 것이라고 생각합니다.