Inversion of Control<br />e <br />Dependency Injection <br />
solo una questione di termini ...<br />Dependency Injection (DI)<br />è una forma di <br />Inversion of Control (IoC)<br /...
che cosa si intende per IoC ?<br />
questa classe ha un problema<br />
questa classe ha un problema<br />Questa classe ha un problema *<br />* http://www.objectmentor.com/resources/articles/dip...
questa classe ha un problema<br />La classe MyBusinessLogic è dipendente dall'implementazione concreta di FileLogger<br />
questa classe ha un problema<br />Nel caso volessi riutilizzare la classe MyBusinessLogic, devo "copiare" nel nuovo proget...
questa classe ha un problema<br />Nel caso volessi cambiare logger, devo modificare la classe MyBusinessLogic violando il ...
proviamo a sistemarla<br />
proviamo a sistemarla<br />
proviamo a sistemarla<br />ora la dipendenza esterna è stata astratta con un'interfaccia<br />
proviamo a sistemarla<br />ora il logger concreto deve essere passato (injected) come parametro del costruttore<br />
proviamo a sistemarla<br />cosi' facendo la dipendenza è stata invertita<br />
proviamo a sistemarla<br />ora la classe MyBusinessLogic dipende da qualcun'altro che dall'esterno deve passare la dipende...
ritornando alla terminologia,<br />la Dependency Injection (DI) <br />è una forma di <br />Inversion of Control (IoC)<br /...
Test Driven Development (TDD)<br />La dependency injection <br />è il modo più pulito <br />per rendere il codice testabil...
Test Driven Development (TDD)<br />La dependency injection <br />è il modo migliore <br />per disaccoppiare il codice<br />
Test Driven Development (TDD)<br />ne consegue che ...<br />
Test Driven Development (TDD)<br />TDD ==> codice disaccoppiato gratis !!!<br />
Test Driven Development (TDD)<br />Provare per credere ! :-)<br />
Test Driven Development (TDD)<br />
Test Driven Development (TDD)<br />
Depenedency Injection Rocks !!!<br />
Depenedency Injection Rocks !!!<br />ma a volte ...<br />
Depenedency Injection Rocks !!!<br />ndr: ATTENZIONE !!! <br />questo codice è lineare e leggibile<br />
Depenedency Injection Rocks !!!<br />SomeServiceFactory Method<br />quando il codice è scritto bene in Test Driven, <br />...
Depenedency Injection Rocks !!!<br />SomeServiceFactory Method<br />... le dipendenze e le relative configurazioni<br />si...
Frameworks di IoC <br />o Inversion of control containers<br />Possono essere di aiuto gli IoC Containers, <br />tra i più...
Frameworks di IoC <br />ci sono 3 tipi principali di DI *:<br /><ul><li>Constructor injection
Setter injection
Interface injection</li></ul>* Martin Fowler http://martinfowler.com/articles/injection.html (Jan 2004)<br />
Frameworks di IoC <br />noi utilizziamo sempre "Constructor Injection"<br />
Frameworks di IoC <br />noi utilizziamo sempre "Constructor Injection"<br /> "If you use Dependency Injection there are a ...
Frameworks di IoC <br />esempio con Castle<br />
Frameworks di IoC <br />Quando usare la configurazione su file e quando via codice ?<br />
Frameworks di IoC <br />Quando usare la configurazione su file e quando via codice ?<br />Fowler consiglia: <br />"For mos...
Frameworks di IoC <br />Esempio… con OpenRastae DI<br />
-- Parte 2 --<br />
-- Parte 2 --<br />"... il vostro amico Happy Harry Hard On<br />è qui per ricordarvi <br />di mangiare i cereali con la f...
-- Parte 2 --<br />vediamo cosa ne pensa <br />David Heinemeier Hansson<br />dei framework di IoC ...<br />* http://www.sc...
-- Parte 2 --<br />Il concetto di DI è importantissimo, <br />ma nei linguaggi dinamici non servono framework complessi<br...
Upcoming SlideShare
Loading in …5
×

Inversion of control e Dependency Injection (ITA)

2,187 views

Published on

This is an old presentation I've given for a Lunch&Learn in my previous job. In this presentation I'm trying to explain the concept of Inversion of Control, It's advantages and how Test Driven Development forces you to embrace this approach. When the dependencies becomes many the need for a framework arise, those frameworks are usually called IoC. Than quickly I intruduce the difference in Dynamic Languages as Ruby.

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,187
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
25
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Inversion of control e Dependency Injection (ITA)

  1. 1. Inversion of Control<br />e <br />Dependency Injection <br />
  2. 2. solo una questione di termini ...<br />Dependency Injection (DI)<br />è una forma di <br />Inversion of Control (IoC)<br />"se puoi chiamarlo con il nome giusto, <br />allora puoi farlo correttamente", anonimo<br />
  3. 3. che cosa si intende per IoC ?<br />
  4. 4. questa classe ha un problema<br />
  5. 5. questa classe ha un problema<br />Questa classe ha un problema *<br />* http://www.objectmentor.com/resources/articles/dip.pdf<br />
  6. 6. questa classe ha un problema<br />La classe MyBusinessLogic è dipendente dall'implementazione concreta di FileLogger<br />
  7. 7. questa classe ha un problema<br />Nel caso volessi riutilizzare la classe MyBusinessLogic, devo "copiare" nel nuovo progetto anche l'implementazione di FileLogger<br />
  8. 8. questa classe ha un problema<br />Nel caso volessi cambiare logger, devo modificare la classe MyBusinessLogic violando il principio di Single Responsability*<br />* http://www.objectmentor.com/resources/articles/srp.pdf<br />
  9. 9. proviamo a sistemarla<br />
  10. 10. proviamo a sistemarla<br />
  11. 11. proviamo a sistemarla<br />ora la dipendenza esterna è stata astratta con un'interfaccia<br />
  12. 12. proviamo a sistemarla<br />ora il logger concreto deve essere passato (injected) come parametro del costruttore<br />
  13. 13. proviamo a sistemarla<br />cosi' facendo la dipendenza è stata invertita<br />
  14. 14. proviamo a sistemarla<br />ora la classe MyBusinessLogic dipende da qualcun'altro che dall'esterno deve passare la dipendenza.<br />
  15. 15. ritornando alla terminologia,<br />la Dependency Injection (DI) <br />è una forma di <br />Inversion of Control (IoC)<br />noi in genere utilizziamo solo DI, <br />quindi d'ora in poi parleremo solo di DI<br />
  16. 16. Test Driven Development (TDD)<br />La dependency injection <br />è il modo più pulito <br />per rendere il codice testabile<br />
  17. 17. Test Driven Development (TDD)<br />La dependency injection <br />è il modo migliore <br />per disaccoppiare il codice<br />
  18. 18. Test Driven Development (TDD)<br />ne consegue che ...<br />
  19. 19. Test Driven Development (TDD)<br />TDD ==> codice disaccoppiato gratis !!!<br />
  20. 20. Test Driven Development (TDD)<br />Provare per credere ! :-)<br />
  21. 21. Test Driven Development (TDD)<br />
  22. 22. Test Driven Development (TDD)<br />
  23. 23. Depenedency Injection Rocks !!!<br />
  24. 24. Depenedency Injection Rocks !!!<br />ma a volte ...<br />
  25. 25. Depenedency Injection Rocks !!!<br />ndr: ATTENZIONE !!! <br />questo codice è lineare e leggibile<br />
  26. 26. Depenedency Injection Rocks !!!<br />SomeServiceFactory Method<br />quando il codice è scritto bene in Test Driven, <br />le responsabilità sono ben isolate e ...<br />
  27. 27. Depenedency Injection Rocks !!!<br />SomeServiceFactory Method<br />... le dipendenze e le relative configurazioni<br />si moltiplicano ...<br />
  28. 28. Frameworks di IoC <br />o Inversion of control containers<br />Possono essere di aiuto gli IoC Containers, <br />tra i più famosi ...<br />
  29. 29. Frameworks di IoC <br />ci sono 3 tipi principali di DI *:<br /><ul><li>Constructor injection
  30. 30. Setter injection
  31. 31. Interface injection</li></ul>* Martin Fowler http://martinfowler.com/articles/injection.html (Jan 2004)<br />
  32. 32. Frameworks di IoC <br />noi utilizziamo sempre "Constructor Injection"<br />
  33. 33. Frameworks di IoC <br />noi utilizziamo sempre "Constructor Injection"<br /> "If you use Dependency Injection there are a number of styles to choose between. <br />I would suggest you follow constructor injection unless you run into one of the specific problems with that approach, in which case switch to setter injection. ", Martin Fowler<br />
  34. 34. Frameworks di IoC <br />esempio con Castle<br />
  35. 35. Frameworks di IoC <br />Quando usare la configurazione su file e quando via codice ?<br />
  36. 36. Frameworks di IoC <br />Quando usare la configurazione su file e quando via codice ?<br />Fowler consiglia: <br />"For most applications that are likely to be deployed in many places, a separate configuration file usually makes most sense. Almost all the time this will be an XML file, and this makes sense. <br />However there are cases where it's easier to use program code to do the assembly. One case is where you have a simple application that's not got a lot of deployment variation. In this case a bit of code can be clearer than a separate XML file."<br />
  37. 37. Frameworks di IoC <br />Esempio… con OpenRastae DI<br />
  38. 38. -- Parte 2 --<br />
  39. 39. -- Parte 2 --<br />"... il vostro amico Happy Harry Hard On<br />è qui per ricordarvi <br />di mangiare i cereali con la forchetta,<br />e di fare i compiti al buio ...", da Pump Up The Volume<br />
  40. 40. -- Parte 2 --<br />vediamo cosa ne pensa <br />David Heinemeier Hansson<br />dei framework di IoC ...<br />* http://www.scribemedia.org/2006/07/09/dhh/<br />
  41. 41. -- Parte 2 --<br />Il concetto di DI è importantissimo, <br />ma nei linguaggi dinamici non servono framework complessi<br />per implementarlo<br />... meglio ...<br />si possono ottenere gli stessi risultati <br />con minore sforzo (meno codice)<br />
  42. 42. -- Parte 2 --<br />ref. “Beyond Java” by Bruce Tate<br />pag. 113 Dependency Injection<br />
  43. 43. -- Parte 2 --<br />Esempio Ruby <br />class MyBusinessLogic <br /> def Execute() <br /> Logger.LogEvent("My Event") <br /> end <br />end <br />ora in qualsiasi punto del codice posso sempre, dinamicamente ridefinire la classe Logger <br />class Logger <br /> def <br /> LogEvent(msg) <br /> .... <br /> end <br />end<br />

×