Pubblicato il Lascia un commento

IoC – Inversion of Control

IoC (Inversion of Control).

Caratteristiche

  1. Opposto della programmazione procedurale,
    Prog. proc.: applicativo ==richiama (passa il controllo)==>> librerie “riusabili”
    IoC: applicativo <<==(riceve il controllo)== librerie “riusabili”.
  2. Come le Abstract Factory,
    obiettivo di rendere le componenti software il più indipendenti possibile, affinché sia possibile modificarne una parte senza dover modificare le altre.
  3. Opposto dei linguaggi imperativi,
    nel flusso di controllo non si richiama funzioni di classi o librerie esterne nel momento del bisogno;
  4. Possibilità di “iniettare” dipendenze dall’esterno,
    si accede a funzionalità non istanziando direttamente un oggetto ma tramite (ambiente esterno) contratti definiti tra richiedente e erogante.
  5. Dipendenze tra componenti dichiarate in modo semplice
    es.: classe Automobile necessita oggetto Motore,
    dichiara variabile (istanza di tipo Motore) e metodo (impostare a run-time il riferimento all’oggetto).

 

Dependency injection è una IoC

Controllo su tutti gli aspetti di creazione oggetti e loro dipendenze.
Eliminare dal codice applicativo ogni logica di inizializzazione.

 

Se un oggetto necessita di accedere ad un particolare servizio,
l’oggetto ha in sé solamente una proprietà che può ospitare un riferimento a quel servizio e, quando l’oggetto viene istanziato, un riferimento ad una implementazione di questo servizio gli viene iniettata dal framework esterno,
senza che il programmatore che crea l’oggetto sappia nulla sul posizionamento del servizio o altri dettagli dello stesso.

Senza IoC invece la norma è che se un oggetto necessita di accedere ad un particolare servizio,
l’oggetto stesso si prende la responsabilità di gestirlo,
o avendo un diretto riferimento al servizio,
o individuandolo con un “Service Locator” che gli restituisce un riferimento ad una specifica implementazione del servizio.

 

DI Dependency Injection

Design pattern OOP.

Obiettivi:

  1. semplificare lo sviluppo
  2. migliorare testabilità di software di grandi dimensioni

Elementi coinvolti:

  1. componente dipendente
  2. interface contracts (dichiarazione dipendenze del componente)
  3. injector (o anche provider o container) che crea, a richiesta, le istanze delle classi che implementano delle dependency interfaces.

 

Dichiarare le dipendenze che un componente necessita (interface contracts).
Quando il componente verrà istanziato, un iniettore si prenderà carico di risolvere le dipendenze (attuando dunque la IoC).
Se è la prima volta che si tenta di risolvere una dipendenza l’injector istanzierà il componente dipendente, lo salverà in un contenitore di istanze e lo ritornerà.
Se non è la prima volta, allora ritornerà la copia salvata nel contenitore.
Risolte tutte le dipendenze, il controllo può tornare al componente applicativo.

 

Fonti

https://it.wikipedia.org/wiki/Inversione_del_controllo
http://www.html.it/pag/18717/introduzione-a-ioc-le-dipendenze/

Vedi anche: http://stackoverflow.com/questions/18562752/understanding-ioc-containers-and-dependency-injection

DI – https://it.wikipedia.org/wiki/Dependency_injection

Lascia un commento

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.