17

Apr

Dipendency injection

Ciao a tutti

 La dipendency injection è un design pattern chiamato così da Martin Fowler http://martinfowler.com/articles/injection.html basato sul concetto di Inversion of Control http://blogs.dotnethell.it/espositos/Inversion-of-Control-IoC-Hollywood-Principle__16282.aspx già conosciuto com Dipendency Inversion Principle http://www.objectmentor.com/resources/articles/dip.pdf, uno dei pattern conosciuti con l'acronimo SOLID.

Particolarmente diffuso come pattern anche grazie ai tanti framework che lo utilizzano o che ne facilitano l'implementazione come Spring, Unity, Ninject, per citarne alcuni, è in 2 parole un modo per disaccoppiare oggetti.

Con DIP in pratica si distinguono due livelli di programmazione, quella ad alto livello (la fattura viene stampata) e quella concreta dove un oggetto printer genera un vero PDF secondo come è implementato, tramite l'uso di container, classi che rappresentano un Task da effettuarsi (la stampa) in cui c'è tutta la logica necessaria per elaborare i dati necessari al task (totali, sconti, etc) e in cui viene invocata l'operazione su di un'interfaccia risolta a runtime da una Utility messa a disposizione da noi, o dal framework utilizzato, basato su file di configurazione.

Ad esempio: avendo una classe
class Task
{
   private IPrinter _printer;
   public void Task(IPrinter printer)
   {
      _printer=Printer;
   }

   public void Execute()
   {
      _printer.Print();
   }
}

In questo caso l'injection è avvenuta a livello di costruttore, avremmo potuto usare anche una property esplicita o un interfaccia apposita.

 

by Antonio Esposito on 4/17/2010