2010-07-16 2 views
10

Google Guice를 종속성 삽입 프레임 워크로 사용하기 시작했으며 최근에 작성한 중소 규모 프로젝트에 추가하려고합니다. Guice가 어떻게 작동하는지에 대한 기본 사항을 이해하지만 접근 방법 세부 사항 중 일부는 모호합니다. 예 :Google Guice와의 격차를 좁히기

1) 모듈을 사용하여 바인딩을 정의한 다음 인젝터에 공급합니다. 모든 것을 하나의 모듈에 집어 넣는 경향이 있습니까? 아니면 많은 것을 작은 모듈로 나누는 경향이 있습니까?

2) 톱 레벨에 주사기를 하나만 가지고 있거나 주사해야하는 의존성을 주사하는 점으로 표시된 전체 주사위 점을 주입합니까? 나는 여기에 내 의존적 인 코드베이스가 있다고 생각하지만, 테스트 중에는 제어해야 할 소수의 코드베이스만을 생각하고있다.

3) 프로덕션 버전 대신 테스트 환경 전용 모듈을 사용하여 내 시스템/통합 테스트를 수행하는 가장 좋은 방법에 조금 얽혀 있습니다. 이 질문은 구현에 따라 다를 수 있지만 사람들이 사용하는 방법이 무엇인지 궁금합니다. 참고로, 내 앱은 서블릿 기반 웹 앱입니다.

다른 포인터?

답변

13

1) 일반적으로 여러 모듈로 구성됩니다. Guice의 목표 중 하나는 코드를 모듈화하는 것을 돕는 것입니다. 이것이 바로 모듈이있는 것입니다. 당신이 이것을 어기는 방법은 당신에게 달렸습니다. (분명히 당신은 꼭해야만하는 것은 아닙니다.) 세분화 된 모듈의 한 가지 이점은 특정 패키지 내에서 모듈을 정의하고 인터페이스를 구현하는 클래스를 private 패키지로 만들 수 있다는 것입니다. 모듈은 패키지에 있기 때문에 구체적인 클래스를 바인딩 할 수 있으며 다른 패키지에있는 Injector을 구성하는 데 사용할 수 있습니다. 또한 하나의 모 놀리 식 모듈에서 코드를 변경하지 않고도 모듈을 다른 모듈로 변경하여 무언가를 변경하는 방법으로 코드를보다 융통성있게 만들 수 있습니다.

2) 예, 전체 개체 트리를 주입하는 최상위 레벨에있는 인젝터 하나가 일반적으로 수행되어야하는 방식입니다. 이것은 다시 모듈로 돌아옵니다 ... 의존성을 그룹으로 나누고 하나의 인젝터를 사용하기 위해 그것들을 사용하십시오.

3) 인젝터를 구성하는 다른 진입 점 클래스를 사용하십시오. 독립 실행 형 응용 프로그램의 경우 다른 main 클래스가 있어야합니다 ... 웹 응용 프로그램의 경우 테스트 용으로 별도의 GuiceServletContextListener을 만들 수 있다고 가정합니다. 그런 다음 전체 모듈을 테스트 용 모듈로 교체하거나 Modules.override을 사용하여 특정 모듈의 바인딩을 오버라이드 할 수 있습니다.

+0

아, 이제 차이점을 느끼기 시작했습니다. 내 혼란을 비추는 다른 게시물을 발견했다. 기본적으로 코드 전체에 걸쳐 여러 개의 인젝터가 종속성 주입보다는 서비스 로케이터 패턴과 유사합니다. 내가 그립감을 갖기 위해서는 아직 더 많은 것이 있지만, 정말 좋은 출발점을 제공하므로 답변 해 주셔서 감사합니다. –

0

Dependency Injection - Guice와 Spring을 모두 다루므로 하나의 프레임 워크에서 다른 프레임 워크로 전환하는 과정이 매우 수월합니다. 이미 IoC의 기본 원리를 이미 이해했다면 분명 좋습니다.

관련 문제