2010-12-06 2 views
8

구글 guice와 유틸리티 메서드를 주입하는 것이 좋은 스타일인지 궁금합니다.Google Guice에서 정적 클래스를 사용하여 Util 클래스를 주입 하시겠습니까?

의 우리가 컨버터 유틸리티 클래스가 있다고 가정 해 봅시다 :

public class UtilClass 
{ 
    public static Result convert(Source src) 
    { 
    //Do conversion 

    return result; 
    } 
} 

내 아이디어로 만든 응용 프로그램에 권장되는 방법이

@Singleton 
public class UtilClass 
{ 
    public Result convert(Source src) 
    { 
    //Do conversion 

    return result; 
    } 
} 

처럼 싱글로이 유틸리티를 주입 guice을 사용하는 것입니다 guice?

답변

11

귀하의 convert() 방법의 특성에 따라 다릅니다.

  • 간단한 일이 있다면
  • (즉, 추가 매개 변수에 의존하지 않는다)
  • 은 변경 가능성이 부작용이없는 결정적

정적 유틸리티 방법으로 유지할 수 있습니다.

그렇지 않으면 병합 주입에 적합한 후보입니다 (더 명확하게하려면 ConversionService으로 바꿀 수 있음).

4

우선, 정적 메서드를 계속 사용하는 대신이 유틸리티 클래스의 인스턴스를 주입하는 목표는 무엇입니까? 입력과 출력이 있고 부작용이없는 함수는 종종 정적 메서드로 가장 좋습니다. 즉, 테스트를 위해이 메소드가 수행하는 작업이나 일부 작업을 변경할 수 있기를 원할 수도 있습니다. 이 경우 일반적으로 클래스가 클라이언트 클래스에서 사용하는 인터페이스를 구현하게해야합니다.

어쨌든 UtilClass이 상태없는 경우 나는 이 아닌을 단독으로 주입합니다. 비 싱글 톤을 주입하는 것이 싱글 톤을 주입하는 것보다 빠릅니다. 어쩌면 만약 당신이 많은 다른 클래스들에 삽입 된 인스턴스를 저장하려고한다면, 싱글 톤은 공간을 절약하는 것이 합리적 일 것입니다.

+0

싱글 톤 삽입 문제를 명확히 해 주셔서 감사합니다! –

3

개인적으로 나는 일반적으로 내 응용 프로그램이 의존성 주입 프레임 워크를 사용하여 배선된다는 사실을 내 수업 등을 위해 내린 설계 결정에 영향을 미치지 않으려 고 노력합니다. 좋은 디자인 관행이이를 명심해야합니다. 귀하의 경우 유틸리티 클래스는 상태에 의존하지 않으므로 정적으로 유지하는 것이 현명한 후보로 보입니다.

유틸리티 클래스는 인터페이스의 구현이 아니므로이를 사용하는 클라이언트 코드는 여전히 밀접하게 연결된 종속성을 갖습니다. 이를 통해 클라이언트 코드에서 직접 정적 클래스를 참조하는 대신 DI를 사용하여 유틸리티 클래스를 주입하는 이점은 무엇인지 알기가 어렵습니다.

관련 문제