J'ai une classe qui dépend de 3 classes, dont les 3 ont d'autres classes sur lesquelles ils comptent. Actuellement, j'utilise une classe conteneur pour créer toutes les classes requises, les injecter les unes dans les autres et retourner l'application.Quelle est la différence entre les modèles DI et les modèles d'usine?
La version simplifiée du conteneur ressemble à quelque chose comme ceci:
class Builder
{
private $_options;
public function __construct($options)
{
$this->_options = $options;
}
public function build()
{
$cache = $this->getCache();
$response = $this->getResponse();
$engine = $this->getEngine();
return new Application($cache,$response,$engine);
}
public function getResponse()
{
$encoder = $this->getResponseEncoder();
$cache = $this->getResponseCache();
return new Response($encoder,$cache);
}
// Methods for building each object
}
Je ne sais pas si ce serait classé comme FactoryMethod ou un conteneur DI. Ils semblent tous deux résoudre le même problème de la même manière: ils construisent des objets et injectent des dépendances. Ce conteneur a des méthodes de construction plus compliquées, comme charger des observateurs et les attacher à des objets observables.
Les usines devraient-elles faire tout le bâtiment (extensions de chargement, etc.) et le conteneur DI devrait utiliser ces usines pour injecter des dépendances? De cette façon, les sous-packages, comme Cache, Response etc., peuvent chacun avoir leurs propres usines spécialisées.
Copie possible: http://stackoverflow.com/questions/557742/dependency-injection-vs-factory-pattern –