2009-09-22 7 views

Répondre

37

L'utilisation de Google Guice pour simplifier les tests unitaires n'est qu'un avantage de haut niveau. Certaines personnes n'utilisent même pas les tests unitaires dans leur projet. Les gens ont utilisé Spring/Dependency Injection plus que pour les tests unitaires.

L'avantage de bas niveau de l'utilisation de Google Guice est une question de cohésion dans votre application, vos classes dans le projet peuvent être vaguement couplées entre elles. Je peux fournir une classe pour une autre classe sans qu'ils soient dépendants l'un de l'autre.

Considérons cet exemple:

public class A{ 

} 

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

classe B sera étroitement associée à la classe A, ou en d'autres termes, il dépend de l'existence de la classe A.

Mais avec Guice je place le rendre couplé de façon lâche comme ceci:

public class B{ 
    private A a; 

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

classe B est maintenant couplé de façon lâche à A, et Guice est responsable de fournir l'instance de A au lieu de B avoir à instancier . Avec cela, vous pouvez l'étendre pour fournir une interface de A à B, et l'implémentation peut être un objet Mock si vous voulez tester vos applications. Cela dit, nous ne parlons que des avantages de l'injection de dépendances jusqu'à présent. Au-delà de l'injection de dépendance, les avantages de l'utilisation de Google Guice est:

  1. Guice a une implémentation très propre du constructeur Injection. Comme vous pouvez le voir dans l'exemple, vous ajoutez simplement le constructeur d'annotation @Injection.
  2. Guice possède également une Injection Setter utilisant la même annotation. Cela dit, l'injection basée sur les annotations est une approche très propre par rapport à l'injection basée sur XML comme une autre implémentation DI. La totalité de l'injection et de la configuration des dépendances utilise Java, ce qui vous garantit une sécurité de type par défaut dans votre application.
  3. Guice a une implémentation très légère de la programmation orientée aspect (ou peut-être vous pouvez l'appeler comme un wrapper à l'implémentation AOPAlliance AOP). Et la bonne chose est que cela ne génère pas de souches ou quoi que ce soit.

Voilà l'aperçu de celui-ci.Mais au fur et à mesure que vous approfondissez Guice, il y a tellement plus de bonnes choses à ce sujet. Un simple exemple réel est si vous utilisez GWT with MVP implementation, les composants/widgets dans votre application GWT est très faiblement couplée et pas étroitement intégrés les uns aux autres.

4

Je pense que l'avantage vient du codage des interfaces, des tests et des proxies. Le codage sur une interface aide à maintenir votre code en couche correctement, permet d'injecter des mocks pour les tests et vous permet de générer automatiquement des proxies pour que le code client ne se soucie pas de l'implémentation.

Ceci est vrai pour Guice, Spring, PicoContainer et tous les frameworks DI.

Assez succinct?

15

Vous devriez peut-être remonter le temps et regarder de plus près les problèmes que Guice voulait résoudre. Pour comprendre les motivations derrière Guice, les nouvelles Bob Lee: I Don't Get Spring sur TheServerSide.COM (et ses commentaires) est le point de départ parfait. Ensuite, allez-y avec l'annonce de Google Guice, A Java Dependency Injection Framework (et les commentaires) et le Tech Talk: Bob Lee on Google Guice (et les commentaires). Personnellement, je partageais des inquiétudes à propos de XML maléfique: configuration XML enfer, XML et erreurs d'exécution possibles, identificateurs de chaînes adverses et refactoring, etc., etc. En fait, je crois que les opinions sceptiques sur Spring et la concurrence étaient bon pour tout le monde (y compris le printemps). J'étais donc heureux de voir un nouveau joueur dans le paysage du cadre DI, en particulier un cadre moderne tirant parti des fonctionnalités de Java 5 (génériques et annotations pour la sécurité de type).

Et parce que Google est en cours d'exécution Guice dans les applications critiques (presque toutes les applications Java est une application de base Guice: AdWords, Google Docs, Gmail, et même YouTube tel que rapporté par "Crazy" Bob Lee Guice²), je ne peux pas croire que Guice est totalement faux et ne fournit aucune valeur. Malheureusement, je ne pense pas que Google fournira beaucoup de code de ces applications comme exemples ... Mais vous pouvez trouver des choses intéressantes dans le list of applications that use Guice et/ou le list of 3rd party Guice addons. Ou consultez les livres mentionnés au Guice². Ou demandez à Bob :)

+0

Que voulez-vous dire exactement par "refactoring-adverse string identifiers"? Pourriez-vous s'il vous plaît développer un peu? – Geek

Questions connexes