Antonio Esposito's


Prodotti tipici .NETtiani

Inversion of Control - IoC/ Hollywood Principle

Ciao a tutti

in azienda mi è capitato di discuterne e mi piacerebbe spenderci pochi minuti sopra.

Un esempio:
Quando si crea un applicazione proceduale (vedi una applicazione console che accetta a parametro il nome di un file per comprimerlo) si puo dire che il flusso di controllo dell'applicazione è totalmente in mano allo sviluppatore e quindi all'applicazione. Tu chiami l'applicazione e aspetti che finisca.

Differentemente si puo scegliere di delegare il flusso di controllo dell'applicazione all'utente stesso tramite dei controlli che interagiscono con lui come un pulsante e ogni altro componente grafico, windows o web, che fa si che l'applicazione risponda a un determinato input da parte dell'utente. E' l'applicazione che chiama te (chiedendoti di scegliere cosa fare) - Inversione del controllo.

Adesso spostiamo l'esempio in un contesto di programmazione:
Quando l'applicazione ha il controllo (contesto normale) è lei a sapere cosa fare e in che sequenza, ad esempio faccio la SELECT, ci penso su, faccio l'UPDATE....
Diversamente è possibile utilizzare un framework o una classe predisposta a fare qualcosa con un determinato comportamento, ma senza sapere come: leggo i dati, ci penso, aggiorno i dati, poi sarà a noi estendere la classe o il framework in modo che si comporti nel modo in cui vogliamo, ad esempio estendendo il metodo ReadFromDB() con una SELECT su SQLServer, il metodo CiPenso() con del nostro codice e il metodo UpdateToDB() con una UPDATE su SQLServer. Questa inversione, non sono io a pilotare dei metodi da me conosciuti ma il componente a me sconosciuto a pilotare alcune mie estenzioni o ad eseguire il default, è l'Inversion of Control.

 

Per approfondimenti: http://martinfowler.com/bliki/InversionOfControl.html

 

Categoria: Architettura
mercoledì, 27 gen 2010 Ore. 16.45
Statistiche
  • Views Home Page: 8.621
  • Views Posts: 53.054
  • Views Gallerie: 0
  • n° Posts: 44
  • n° Commenti: 3.267
Copyright © 2002-2007 - Blogs 2.0
dotNetHell.it | Home Page Blogs
ASP.NET 2.0 Windows 2003