Guice指南-手工依賴注入

梧桐雨—168發表於2008-03-21
手工依賴注入
依賴注入模式的目標之一是使單元測試更簡單。我們不需要特殊的框架就可以實踐依賴注入模式。依靠手工編寫程式碼,你可以得到該模式大約80%的好處。

當上例中的客戶程式碼向工廠物件請求一個服務時,根據依賴注入模式,客戶程式碼希望它所依賴的物件例項可以被傳入自己。也就是說:不要呼叫我,我會呼叫你。

public class Client {
   
  private final Service service;

  public Client(Service service) {
    this.service = service;
  }

  public void go() {
    service.go();
  }
}
這讓我們的單元測試簡化了不少。我們可以只傳入一個偽服務物件,在結束後也不需要多做什麼。

public void testClient() {
  MockService mock = new MockService();
  Client client = new Client(mock);
  client.go();
  assertTrue(mock.isGone());
}
我們也可以精確地區分出客戶程式碼依賴的API。

現在,我們如何連線客戶和服務物件呢?手工實現依賴注入的時候,我們可以將所有依賴邏輯都移動到工廠類中。也就是說,我們還需要有一個工廠類來建立客戶物件。

public static class ClientFactory {

  private ClientFactory() {}

  public static Client getInstance() {
    Service service = ServiceFactory.getInstance();
    return new Client(service);
  }
}
手工實現依賴注入需要的程式碼行數和簡單工廠模式差不多。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13270562/viewspace-214952/,如需轉載,請註明出處,否則將追究法律責任。

相關文章