Va bene, questa domanda non è su quale sia meglio. È più su quando utilizzare Dependency Injection vs Factory.
Ho fatto un po 'di ricerche e va così.
DIP:
- Fornisce un accoppiamento lento, tramite IoC. La classe non ha bisogno di sapere come ha ottenuto le dipendenze. I contenitori IoC prendono il controllo di fornire le dipendenze.
di fabbrica:
- È uno schema di creazione, utilizzato per generare le dipendenze per una classe. Fornisce anche un accoppiamento lento poiché la classe non crea più direttamente le sue dipendenze.
Per me sembra che DI possa essere usato nella maggior parte delle situazioni per iniettare le Dipendenze e le Fabbriche possono essere del tutto escluse. Utilizzo Spring (da un anno a questa parte) e la maggior parte delle volte una classe ha bisogno di 1 o 2 dipendenze particolari e Spring rende le cose abbastanza facili.
Prendendo in considerazione le Fabbriche, uno scenario che penso in cui DI risulterebbe un po 'macchinoso, è quando una classe ha bisogno di una certa dipendenza basata su qualche condizione.
Qualcosa del genere:
class Bike {
private Engine engine;
private Model model;
public initEngine() {
if(model == 'VINTAGE')
engine = new CaseIronEngine();
else if(model == 'MODERN')
engine = new AluminiumAlloyEngine();
..
..
}
}
In questo caso, DI non sarebbe così semplice e Factory dovrebbe essere una soluzione ideale.
Quindi gentilmente getta qualche pensiero su questo. Molti articoli sul web menzionano che DI è una sorta di sostituzione di Factory Patterns. Ma ancora non esiste un articolo concreto su cui si possa scegliere meglio in base a quale circostanza.
Alcuni articoli che citano DI come la prossima grande cosa sono i seguenti: