Google Guice와 같은 종속성 주입 프레임 워크는 사용법에 대한 다음 동기 ( source )를 제공합니다.
객체를 구성하려면 먼저 해당 객체의 종속성을 작성하십시오. 그러나 각 종속성을 빌드하려면 해당 종속성 등이 필요합니다. 따라서 객체를 만들 때 실제로 객체 그래프를 만들어야합니다.
손으로 객체 그래프를 작성하는 것은 노동 집약적이며 (...) 테스트를 어렵게 만듭니다.
그러나 나는이 주장을 사지 않았다 : 의존성 주입 프레임 워크가 없어도 인스턴스화하기 쉽고 테스트하기 편리한 클래스를 작성할 수있다. 예를 들어 Guice 동기 부여 페이지 의 예제 는 다음과 같이 다시 작성할 수 있습니다.
class BillingService
{
private final CreditCardProcessor processor;
private final TransactionLog transactionLog;
// constructor for tests, taking all collaborators as parameters
BillingService(CreditCardProcessor processor, TransactionLog transactionLog)
{
this.processor = processor;
this.transactionLog = transactionLog;
}
// constructor for production, calling the (productive) constructors of the collaborators
public BillingService()
{
this(new PaypalCreditCardProcessor(), new DatabaseTransactionLog());
}
public Receipt chargeOrder(PizzaOrder order, CreditCard creditCard)
{
...
}
}
의존성 주입 프레임 워크에 대한 다른 주장이있을 수 있지만 ( 이 질문의 범위를 벗어났습니다 !) 테스트 가능한 객체 그래프를 쉽게 만드는 것은 그중 하나가 아닙니다.