J'essaie d'ouvrir mon esprit à la fantaisie. IoC principe, et je suis tombé sur l'article : Martin fowler sur IoC
Il donne quelques exemples d'utilisation PicoContainer :
private MutablePicoContainer configureContainer() {
MutablePicoContainer pico = new DefaultPicoContainer();
Parameter[] finderParams = {new ConstantParameter("movies1.txt")};
pico.registerComponentImplementation(MovieFinder.class, ColonMovieFinder.class, finderParams);
pico.registerComponentImplementation(MovieLister.class);
return pico;
}
et ensuite l'utilisation de l'échantillon :
public void testWithPico() {
MutablePicoContainer pico = configureContainer();
MovieLister lister = (MovieLister) pico.getComponentInstance(MovieLister.class);
Movie[] movies = lister.moviesDirectedBy("Sergio Leone");
assertEquals("Once Upon a Time in the West", movies[0].getTitle());
}
La première pensée qui m'est venue à l'esprit est la suivante : pourquoi utiliser quelque chose d'aussi compliqué que PicoContainer pour configurer la création d'un objet - et en fait appliquer l'injection de dépendances - (je suis un développeur .NET, donc dans .NET, il faudrait probablement utiliser Réflexion ce qui prend du temps), alors que nous pouvons réaliser la même encapsulation de la création d'objet dans (par exemple) Usines o Constructeur avec un système rapide nouveau opérateur.
Une autre chose : configureContainer() est toujours compilé, les types exacts sont spécifiés au moment de la compilation. Alors pourquoi ne pas utiliser des fabriques, et décider dans le fichier de configuration quelle fabrique utiliser ?
Comme cette approche est nouvelle pour moi, je suppose qu'il y a quelque chose qui me manque en termes d'avantages des conteneurs IoC.