2010-07-16 75 views
10

我剛剛開始使用Google Guice作爲依賴注入框架,並試圖將其改進爲我最近編寫的一箇中小型項目。我瞭解Guice如何工作的基礎知識,但對某些方法細節有些模糊。例如:與Google Guice握手

1)模塊用於定義綁定,然後將其輸入注入器。你傾向於把所有東西都放到一個模塊中,還是傾向於把東西分解成許多更小的模塊?

2)您是否在頂層注入了一個注入整個對象樹的注入器,或者多個注入器點綴着哪個注入器,只注入那些您真正需要注入的依賴關係?我在這裏想到了我自己的代碼庫,當然,它有很多依賴關係,但只有一小部分我需要在測試期間進行控制。

3)我稍微停留在使用僅測試環境模塊而不是生產版本來獲得我的系統/集成測試的最佳方式。這個問題可能是特定於實現的,但我很好奇人們使用什麼方法。作爲參考,我的應用程序是一個基於servlet的web應用程序。

其他指針?

回答

13

1)通常你會把事情分解成多個模塊。 Guice的目標之一是幫助代碼模塊化,這就是模塊的用途。你如何解決這個問題取決於你(顯然,你並不是絕對必須的)。更細粒度模塊的一個優點是,您可以在特定包中定義模塊,並使實現接口包的專用類變爲私有。由於該模塊位於軟件包中,因此可以綁定這些具體的類,並且可以將它們用於配置Injector(在另一個軟件包中)。另外,當你改變某個模塊的完成方式時,你可以使代碼更加靈活,只需將一個模塊換成另一個模塊,而不必在單個單片模塊中更改代碼。

2)是的,頂層的一個注入器注入整個對象樹是通常應該完成的事情。這回到模塊的東西......使用它們將依賴關係分解到組並使用一個注入器。

3)使用配置注入器的不同入口級別。對於一個獨立的應用程序,我有一個不同的main類...對於一個web應用程序,我想你可以做一個單獨的GuiceServletContextListener進行測試。然後,您可以用模塊替換整個模塊進行測試,或使用Modules.override覆蓋特定模塊中的綁定等。

+0

啊,我想我現在開始看到差異了。我偶然發現了另一篇關於我的困惑的帖子。從本質上講,整個代碼中的多個注入器更類似於服務定位器模式,而不是依賴注入。還有更多的事情需要我去解決,但是謝謝你的回答,因爲這給了我一個非常好的開始。 – 2010-07-19 10:28:36

0

看看書Dependency Injection - 它涵蓋了Guice和Spring,所以非常適合從一個框架轉換到另一個框架。如果您已經瞭解IoC背後的原理,那肯定很好。