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