Utilizzo - Factory Pattern vs Injection dipendenza [chiuso]

4

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:

posta AgentX 16.08.2015 - 16:04
fonte

1 risposta

4

Hai praticamente colpito l'unghia in testa.

L'iniezione di dipendenza è una scelta ideale quando si desidera ottenere dipendenze note e invariate in fase di runtime o in fase di compilazione, a seconda della modalità di configurazione. Supponiamo che tu abbia un mailer nella tua applicazione implementato da IMailer e che tu possa usare TextBasedMailer o HtmlBasedMailer. È possibile creare l'applicazione o utilizzare un file di configurazione per dire al framework DI quale implementazione utilizzare.

Ora, diciamo che l'IMailer da usare dipende da una preferenza per un utente. Alcuni utenti vogliono e-mail in chiaro, altri HTML. Nel momento in cui richiedi l'istanza di IMailer hai bisogno di una sorta di logica per determinare a quale mailer risolvere. Questa logica sarebbe probabilmente isolata in una classe e in quel momento stai praticamente usando il modello Factory, anche se non lo chiami così.

Si noti che questi due non si escludono a vicenda. Ad esempio, supponiamo che la tua applicazione possa spedire allegati in un formato scelto dall'utente. Implementerai diversi IAttachmentGenerators come PdfAttachmentGenerator, HtmlAttachmentGenerator, WordAttachmentGenerator, ... Potresti avere un AttachmentFactory che ottiene l'elenco di IAttachmentGenerators tramite DI e risolve il Generator corretto da utilizzare in base alle preferenze dell'utente. In questo caso, stai utilizzando DI AND fabbrica.

    
risposta data 17.08.2015 - 09:56
fonte

Leggi altre domande sui tag