2009-09-22 16 views

Odpowiedz

37

Korzystanie z Google Guice w celu ułatwienia testów jednostkowych jest tylko zaletą wysokiego poziomu. Niektórzy ludzie mogą nawet nie używać testów jednostkowych w swoim projekcie. Ludzie używają wtrysku Spring/Dependency Injection bardziej niż tylko do testów jednostkowych.

Niska przewaga korzystania z Google Guice to kwestia spójności w twojej aplikacji, twoje klasy w projekcie mogą być luźno powiązane między sobą. Mogę zapewnić klasę dla innej klasy bez ich zależności od siebie.

Rozważmy następujący przykład:

public class A{ 

} 

public class B{ 
    A a = new A(); 
} 

Klasa B będzie ściśle sprzężone do klasy A, czyli innymi słowy jest to zależne do istnienia Klasa A jest.

Ale z Guice mogę zamiast uczynić go luźno tak:

public class B{ 
    private A a; 

    @Inject 
    public B(A a){ 
     this.a = a; 
    } 
} 

klasy B jest teraz luźno sprzężona A i Guice jest odpowiedzialny za dostarczenie instancji zamiast B konieczności jego instancję . Dzięki temu możesz go rozszerzyć, aby zapewnić interfejs od A do B, a implementacja może być obiektem Mock, jeśli chcesz przetestować swoje aplikacje.

Powiedziawszy, że omawiamy tylko korzyści wynikające z Dependency Injection. Beyond Dependency Injection, korzyści z używania Google Guice to:

  1. Guice ma bardzo czystą implementację Injection konstruktora. Jak widać na przykładzie, po prostu dodajemy konstruktor adnotacji @Injection.
  2. Guice ma również ustawiania Inject przy użyciu tej samej adnotacji.
  3. Powiedziawszy to, innotacja oparta na adnotacjach jest bardzo czystym podejściem w porównaniu do wtrysku opartego na XML, jak w przypadku innych implementacji DI.
  4. Cała iniekcja i konfiguracja zależności używa języka Java, więc masz pewność, że domyślnie uzyskasz w aplikacji typ danych.
  5. Guice ma bardzo lekką implementację programowania zorientowanego na aspekt (a może można go nazwać wrapperem do implementacji AOPAlliance AOP). A dobrą rzeczą jest to, że nie generuje żadnych skrótów ani tego, co-tak-kiedykolwiek.

Oto przegląd tego.Ale kiedy pogłębiasz się z Guice, jest o wiele więcej dobrych rzeczy. Prostym przykładem jest użycie , jeśli używasz GWT with MVP implementation, komponenty/widżety w twojej aplikacji GWT są bardzo luźno połączone i nie są ściśle ze sobą zintegrowane.

4

Myślę, że zaletą jest kodowanie do interfejsów, testów i serwerów proxy.

Kodowanie do interfejsu pomaga utrzymać poprawność warstw kodu, umożliwia wstrzykiwanie mocks do testowania i pozwala generować proxy automatycznie, więc kod klienta nie musi martwić się o implementację.

Dotyczy to programów Guice, Spring, PicoContainer i wszystkich frameworków DI.

Zwięźle wystarczy?

15

Może powinieneś cofnąć się w czasie i przyjrzeć się problemom, które Guice chciał rozwiązać. Aby zrozumieć motywy stojące za Guice, wiadomość o Bob Lee: I Don't Get Spring na TheServerSide.COM (i jej komentarze) jest idealnym punktem wyjścia. Następnie należy opublikować ogłoszenie: Google Guice, A Java Dependency Injection Framework (i komentarze) oraz Tech Talk: Bob Lee on Google Guice (i komentarze).

Osobiście podzielałem obawy dotyczące złego XML: konfiguracja XML piekła, XML i ewentualne błędy w czasie wykonywania, podatne na błędy i refaktoryzujące niepożądane identyfikatory ciągów itp., Itp. Właściwie, uważam, że sceptyczne opinie na temat wiosny i współbieżności były następujące: dobre dla wszystkich (w tym Spring). Byłem szczęśliwy, widząc nowego gracza w krajobrazie DI, w szczególności nowoczesne ramy wykorzystujące funkcje Java 5 (generyczne i adnotacje ze względu na bezpieczeństwo typu).

A ponieważ Google działa Guice w krytycznych aplikacji (prawie każda aplikacja Java jest również aplikacja Guice-base: AdWords, Google Docs, Gmail, a nawet YouTube jak donosi "crazy" Bob Lee Guice²), nie mogę uwierzyć, że Guice jest całkowicie błędny i nie zapewnia żadnej wartości. Niestety, nie sądzę, że Google dostarczy wiele kodu tych aplikacji jako przykładów ... Ale możesz znaleźć interesujące rzeczy w list of applications that use Guice i/lub list of 3rd party Guice addons. Lub sprawdź książki wymienione w Guice². Lub zapytaj Boba :)

+0

Co dokładnie masz na myśli, mówiąc o "negatywnych identyfikatorach ciągów refaktoryzujących"? Czy mógłbyś nieco rozszerzyć? – Geek

Powiązane problemy