Daniele La NaveLa sostenibile leggerezza di Spring!Ovvero, come migliorare il nostro team e la nostraproduttività utilizza...
Capitolo 1         Daniele La Nave   dlanave@extrema-sistemas.com - Extrema SistemasCome portare il nostro team,bendato e ...
Come portare il nostro team, bendato e con i tappi alle orecchie,           alla piena comprensione dell’OOP utilizzando S...
Come portare il nostro team, bendato e con i tappi alle orecchie,               alla piena comprensione dell’OOP utilizzan...
Come portare il nostro team, bendato e con i tappi alle orecchie,              alla piena comprensione dell’OOP utilizzand...
Come portare il nostro team, bendato e con i tappi alle orecchie,              alla piena comprensione dell’OOP utilizzand...
Come portare il nostro team, bendato e con i tappi alle orecchie,              alla piena comprensione dell’OOP utilizzand...
Come portare il nostro team, bendato e con i tappi alle orecchie,              alla piena comprensione dell’OOP utilizzand...
Come portare il nostro team, bendato e con i tappi alle orecchie,                alla piena comprensione dell’OOP utilizza...
Come portare il nostro team, bendato e con i tappi alle orecchie,                     alla piena comprensione dell’OOP uti...
Come portare il nostro team, bendato e con i tappi alle orecchie,               alla piena comprensione dell’OOP utilizzan...
Come portare il nostro team, bendato e con i tappi alle orecchie,                         alla piena comprensione dell’OOP...
Come portare il nostro team, bendato e con i tappi alle orecchie,               alla piena comprensione dell’OOP utilizzan...
Come portare il nostro team, bendato e con i tappi alle orecchie,              alla piena comprensione dell’OOP utilizzand...
Come portare il nostro team, bendato e con i tappi alle orecchie,              alla piena comprensione dell’OOP utilizzand...
Come portare il nostro team, bendato e con i tappi alle orecchie,            alla piena comprensione dell’OOP utilizzando ...
Come portare il nostro team, bendato e con i tappi alle orecchie,             alla piena comprensione dell’OOP utilizzando...
Come portare il nostro team, bendato e con i tappi alle orecchie,               alla piena comprensione dell’OOP utilizzan...
Capitolo 2      Daniele La Nave   dlanave@extrema-sistemas.com - Extrema Sistemas      “Fatto! …Già fatto??”Codice più eff...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor              quantità              Daniele La Nave      ...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor            quantità            Daniele La Nave          ...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor                quantità                Daniele La Nave  ...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor      quantità      Daniele La Nave                   dla...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor      quantità      Daniele La Nave                   dla...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor         quantità         Daniele La Nave                ...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor                   quantità                   Daniele La ...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor            quantità            Daniele La Nave          ...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor                        quantità                        D...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor                        quantità                        D...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor                      quantità                       Dani...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor                       quantità                       Dan...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor                       quantità                       Dan...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minorquantitàDaniele La Nave                   dlanave@extrema...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor              quantità              Daniele La Nave      ...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor              quantità              Daniele La Nave      ...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor           quantità           Daniele La Nave            ...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minorquantitàDaniele La Nave                   dlanave@extrema...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minorquantitàDaniele La Nave                   dlanave@extrema...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor                      quantità                      Danie...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minorquantitàDaniele La Nave                   dlanave@extrema...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor            quantità            Daniele La Nave          ...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor                      quantità                      Danie...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor                       quantità                       Dan...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minorquantitàDaniele La Nave                   dlanave@extrema...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minorquantitàDaniele La Nave                   dlanave@extrema...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor                       quantità                       Dan...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor           quantità           Daniele La Nave            ...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor              quantità              Daniele La Nave      ...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor    quantità    Daniele La Nave                   dlanave...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor              quantità              Daniele La Nave      ...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor                       quantità                       Dan...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor                      quantità                      Danie...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor           quantità           Daniele La Nave            ...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor               quantità               Daniele La Nave    ...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor           quantità           Daniele La Nave            ...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor               quantità                Daniele La Nave   ...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor                      quantità                      Danie...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor                      quantità                      Danie...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor                       quantità                       Dan...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minorquantitàDaniele La Nave                   dlanave@extrema...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor                    quantità                    Daniele L...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minorquantitàDaniele La Nave                   dlanave@extrema...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor                 quantità                 Daniele La Nave...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor               quantità               Daniele La Nave    ...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor                         quantità                        ...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor                        quantità                        D...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor                        quantità                        D...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minorquantitàDaniele La Nave                   dlanave@extrema...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor   quantità   Daniele La Nave                   dlanave@e...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor               quantità               Daniele La Nave    ...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor    quantità     Daniele La Nave                  dlanave...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minorquantitàDaniele La Nave                   dlanave@extrema...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor                       quantità                       Dan...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor                       quantità                       Dan...
Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minorquantitàDaniele La Nave                   dlanave@extrema...
Capitolo 3        Daniele La Nave   dlanave@extrema-sistemas.com - Extrema Sistemas Facciamo tutti parte di un disegno più...
Facciamo tutti parte di un disegno più grande.               Il team, Spring ed concetti legati ai Design Patterns        ...
Facciamo tutti parte di un disegno più grande.       Il team, Spring ed concetti legati ai Design Patterns       Daniele L...
Facciamo tutti parte di un disegno più grande.Il team, Spring ed concetti legati ai Design PatternsDaniele La Nave        ...
Facciamo tutti parte di un disegno più grande.            Il team, Spring ed concetti legati ai Design Patterns           ...
Facciamo tutti parte di un disegno più grande.   Il team, Spring ed concetti legati ai Design Patterns   Daniele La Nave  ...
Facciamo tutti parte di un disegno più grande.Il team, Spring ed concetti legati ai Design PatternsDaniele La Nave        ...
Facciamo tutti parte di un disegno più grande.        Il team, Spring ed concetti legati ai Design Patterns        Daniele...
Facciamo tutti parte di un disegno più grande. Il team, Spring ed concetti legati ai Design Patterns Daniele La Nave      ...
Facciamo tutti parte di un disegno più grande.      Il team, Spring ed concetti legati ai Design Patterns      Daniele La ...
Capitolo 4         Daniele La Nave   dlanave@extrema-sistemas.com - Extrema Sistemas “La potenza è nulla senza controllo!”...
La potenza è nulla senza controllo!                Perché i test di unità devono essere un MUST                Daniele La ...
La potenza è nulla senza controllo!                 Perché i test di unità devono essere un MUST                 Daniele L...
La potenza è nulla senza controllo!              Perché i test di unità devono essere un MUST              Daniele La Nave...
La potenza è nulla senza controllo!Perché i test di unità devono essere un MUSTDaniele La Nave                dlanave@extr...
La potenza è nulla senza controllo!Perché i test di unità devono essere un MUSTDaniele La Nave                dlanave@extr...
Capitolo 5          Daniele La Nave   dlanave@extrema-sistemas.com - Extrema Sistemas “L’importante è vincere, non parteci...
L’ importante è vincere, non partecipare!     Il valore aggiunto dato da Spring Framework     Daniele La Nave             ...
L’ importante è vincere, non partecipare!              Il valore aggiunto dato da Spring Framework              Daniele La...
L’ importante è vincere, non partecipare!                 Il valore aggiunto dato da Spring Framework                 Dani...
L’ importante è vincere, non partecipare!                    Il valore aggiunto dato da Spring Framework                  ...
L’ importante è vincere, non partecipare!                    Il valore aggiunto dato da Spring Framework                  ...
L’ importante è vincere, non partecipare!                     Il valore aggiunto dato da Spring Framework                 ...
L’ importante è vincere, non partecipare!            Il valore aggiunto dato da Spring Framework            Daniele La Nav...
Q&ADaniele La Nave   dlanave@extrema-sistemas.com - Extrema Sistemas             Q&A
Upcoming SlideShare
Loading in …5
×

Talk codemotion 2013 - La sostenibile leggerezza di Spring

975 views

Published on

Ovvero, come migliorare il nostro team e la nostra produttività utilizzando Spring Framework

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
975
On SlideShare
0
From Embeds
0
Number of Embeds
76
Actions
Shares
0
Downloads
34
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Talk codemotion 2013 - La sostenibile leggerezza di Spring

  1. 1. Daniele La NaveLa sostenibile leggerezza di Spring!Ovvero, come migliorare il nostro team e la nostraproduttività utilizzando Spring Framework.dlanave@extrema-sistemas.comSpring Certified Trainer & Specialist @ Extrema Sistemas
  2. 2. Capitolo 1 Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasCome portare il nostro team,bendato e con i tappi alle orecchie, alla piena comprensione dell’ OOP utilizzando Spring
  3. 3. Come portare il nostro team, bendato e con i tappi alle orecchie, alla piena comprensione dell’OOP utilizzando Spring Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas…..eh ? Perché bendato e con i tappi alle orecchie ?
  4. 4. Come portare il nostro team, bendato e con i tappi alle orecchie, alla piena comprensione dell’OOP utilizzando Spring Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasRisposte:1. Capita, quando si realizza un software, di essere concentrati a soddisfare i requisiti del cliente e meno attenti alle linee guida ed i concetti legati ad una buona progettazione dell’architettura
  5. 5. Come portare il nostro team, bendato e con i tappi alle orecchie, alla piena comprensione dell’OOP utilizzando Spring Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasRisposte:2. Un’ azienda deve, necessariamente, essere produttiva, competitiva, ed in grado di far fronte alle eventuali “turbe” dei clienti. Es: “Vorrei un’ icona di color blu sul mio desktop… …che, se cliccata, scateni il lancio di ordigno di fine di mondo!!!”
  6. 6. Come portare il nostro team, bendato e con i tappi alle orecchie, alla piena comprensione dell’OOP utilizzando Spring Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasRisposte:3. “Lo voglio pronto per la prossima settimana! Anzi, lo voglio pronto per domani!!”
  7. 7. Come portare il nostro team, bendato e con i tappi alle orecchie, alla piena comprensione dell’OOP utilizzando Spring Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasIronia a parte, quanto descritto fin ora può causaredei pericolosi corto-circuiti tra reparti dell’azienda: Settore Commerciale Vs. Settore Sviluppo Oppure, in altri termini, una volta “rotto” il circuito “Fighetti” Vs. “Autistici”
  8. 8. Come portare il nostro team, bendato e con i tappi alle orecchie, alla piena comprensione dell’OOP utilizzando Spring Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasIn realtà, tutti e due i reparti sono “vitali” per lasalute di un’ azienda perché:• Inefficienza dei commerciali = Niente clienti• Inefficienza degli sviluppatori = Niente prodotti Bisogna quindi difendere l’operato di tutti i reparti! (Siamo tutti sulla stessa barca, mai dimenticarlo!!)
  9. 9. Come portare il nostro team, bendato e con i tappi alle orecchie, alla piena comprensione dell’OOP utilizzando Spring Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas...e quindi ? Se i tempi sono corti ed i requisiti “complessi”, come possiamo far contenti tutti ?
  10. 10. Come portare il nostro team, bendato e con i tappi alle orecchie, alla piena comprensione dell’OOP utilizzando Spring Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasI principi fondamentali per l’OOP ci dicono che dovremmoevitare 3 caratteristiche che denotano il “cattivo” design diun’ applicazione: 1. Rigidità (il cambiamento di un requisito richiede il cambiamento di molte parti del sistema) 2. Fragilità (il cambiamento di un requisito interrompe il corretto funzionamento del sistema) 3. Immobilità (impossibilità o difficoltà di riutilizzo delle stesse componenti su più di un’ applicazione)
  11. 11. Come portare il nostro team, bendato e con i tappi alle orecchie, alla piena comprensione dell’OOP utilizzando Spring Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasPer evitare queste caratteristiche di “bad design” sono statedefinite, nel corso degli anni, delle linee guida per aiutarci asviluppare software che non risentano di tali sintomi,ovvero: The Software Design Principles
  12. 12. Come portare il nostro team, bendato e con i tappi alle orecchie, alla piena comprensione dell’OOP utilizzando Spring Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas Dependency Inversion Interface Segregation Open Close Principle Principle Principle Classi, moduli, funzioni I moduli a più alto livello nondovrebbero essere “Aperte” per dovrebbero dipendere dai moduli I Client non dovrebbero l’estensione e “Chiuse” per la di livello più basso, entrambi essere forzati ad modifica dovrebbero dipendere solo dalla implementare interfacce che loro astrazione non utilizzano Liskov’s Substitution Single Responsibility Principle Principle Le classi derivate devono Una classe dovrebbe avere poter sostituire solo una singola ragione per completamente quelle di essere modificata base
  13. 13. Come portare il nostro team, bendato e con i tappi alle orecchie, alla piena comprensione dell’OOP utilizzando Spring Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasSulla base di questi principi, è stata creata una serie dimodelli per la Programmazione Orientata agli Oggetti: The Design Patterns (by GoF) (Sono circa 25, divisi in 3 categorie) Creazionali, Comportamentali, Strutturali
  14. 14. Come portare il nostro team, bendato e con i tappi alle orecchie, alla piena comprensione dell’OOP utilizzando Spring Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasPerò…• Non tutti gli sviluppatori sanno come utilizzarli• Un uso sbagliato può portare il progetto oltre “l’orizzonte degli eventi!”• Potrebbe risultare difficile far capire, ai “non addetti ai lavori”, perché implementarliMa allora, come tenere sotto controllo il progetto ?
  15. 15. Come portare il nostro team, bendato e con i tappi alle orecchie, alla piena comprensione dell’OOP utilizzando Spring Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas La soluzione esiste, ed è apprezzata da milioni di sviluppatori: Spring FrameworkModularità Produttività Portabilità Testabilità
  16. 16. Come portare il nostro team, bendato e con i tappi alle orecchie, alla piena comprensione dell’OOP utilizzando Spring Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasPrincipalmente, Spring ci chiede solodi seguire alcune regole definite come“fondamentali”: • DRY Principle = “Don’t Repeat Yourself” • SoC Principle = “Separation of Concern” (segue)
  17. 17. Come portare il nostro team, bendato e con i tappi alle orecchie, alla piena comprensione dell’OOP utilizzando Spring Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasE, per quel che riguarda il Designdella nostra applicazione, sviluppare: 1. Basandoci sulle interfacce Astrazione dei componenti = loose coupling 2. Preferendo la composizione all’ereditarietà Favorendo, di fatto, la modularità 3. Componendo l’architettura a layer Service, Data Access & Infrastructure è un classico!
  18. 18. Come portare il nostro team, bendato e con i tappi alle orecchie, alla piena comprensione dell’OOP utilizzando Spring Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasQuindi si!…Bendati e con i tappi alle orecchie!…Indaffarati nel soddisfare le richieste del cliente!Contando, però, su di un Framework in grado di dare pienosupporto infrastrutturale per il Design della nostraarchitettura.
  19. 19. Capitolo 2 Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas “Fatto! …Già fatto??”Codice più efficiente e, soprattutto, In minor quantità
  20. 20. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasFitness Club ApplicationRequisiti cliente:• Desktop App (Standalone) • Gestione clienti del club • Gestione delle sottoscrizioni alle attività
  21. 21. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas<<Java Class>> <<Java Class>> <<Java Class>> Member Subscription Activity <<Java Class>> <<Java Class>> Customer Address Domain Objects
  22. 22. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas<<Java Interface>> <<Java Interface>> <<Java Interface>>MemberRepository SubscriptionRepository ActivityRepository <<Java Interface>> <<Java Interface>> CustomerRepository AddressRepository Data Access Layer
  23. 23. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas <<Java Interface>> <<Java Interface>>CustomerManagerService FitnessClubService Service Layer
  24. 24. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas <<Java Class>> <<Java Interface>>JdbcActivityRepository ActivityRepository <<Java Interface>> DataSource Data Access Layer (implementazione)
  25. 25. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas <<Java Class>> <<Java Interface>>HibernateActivityRepository ActivityRepository <<Java Interface>> SessionFactory Data Access Layer (implementazione)
  26. 26. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas <<Java Interface>> MemberRepository <<Java Class>> <<Java Interface>> FitnessClubServiceImpl FitnessClubService <<Java Interface>>SubscriptionRepository <<Java Class>> <<Java Interface>> CustomerManagerServiceImpl CustomerManagerService<<Java Interface>> <<Java Interface>>CustomerRepository AddressRepository Service Layer (implementazione)
  27. 27. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasI componenti della nostra applicazione sono pronti! Passiamo ora alla configurazione di Spring
  28. 28. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/fitnessclubdb"/> <property name="username" value="fitnessclubdbuser"/> <property name="password" value="ItsASecret!"/></bean>Oppure, se gestito da Java EE Container:<jee:jndi-lookup id="dataSource" jndi-name="jdbc/fitnessclubdb"/> db-config.xml
  29. 29. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas<jdbc:embedded-database id="dataSource"> <jdbc:script location="classpath:schema.sql"/> <jdbc:script location="classpath:test-data.sql"/></jdbc:embedded-database> test-db-config.xml
  30. 30. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="packagesToScan" value=“com.extremasistemas.fitnessclub.entities" /> <property name="hibernateProperties"> <value> …</value> </property></bean> hibernate-config.xml
  31. 31. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas…<bean id="customerRepository" class=" com.extremasistemas.examples.fitnessclub.repository.JdbcCustomerRepository "> <constructor-arg ref="dataSource" /></bean>Oppure, utilizzando Hibernate:<bean id="customerRepository" class=" com.extremasistemas.examples.fitnessclub.repository.HibernateCustomerRepository "> <constructor-arg ref="sessionFactory" /></bean>… data-access-config.xml
  32. 32. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas<bean id="customerManagerService" class="com.extremasistemas.examples.fitnessclub.service.CustomerManagerServiceImpl"> <constructor-arg ref="customerRepository" /> <constructor-arg ref="addressRepository" /></bean><bean id="fitenessClubService" class="com.extremasistemas.examples.fitnessclub.service.FitnessClubServiceImpl"> <constructor-arg ref="customerManagerService " /> <constructor-arg ref="memberRepository " /> <constructor-arg ref="subscriptionRepository" /></bean> application-config.xml
  33. 33. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minorquantitàDaniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas Grafico delle dipendenze dei Bean
  34. 34. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasOra che abbiamo definito la configurazione..…”Miwa (Spring), lanciami i componenti!”
  35. 35. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasOra che abbiamo definito la configurazione..…”Miwa (Spring), lanciami i componenti!”
  36. 36. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas“Mmmhhhh.. ma scrivere meno XML, no eh ?”(DI utilizzando le annotazioni ed il “component-scan”)
  37. 37. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minorquantitàDaniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
  38. 38. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minorquantitàDaniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
  39. 39. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas<context:component-scan base-package="com.extremasistemas.examples.fitnessclub" /> application-config.xml
  40. 40. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minorquantitàDaniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
  41. 41. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas“Ma questa applicazione non usa le transazioni !!” (Come applicare le proprietà ACID in 5 minuti)
  42. 42. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/></bean>Oppure, utilizzando Hibernate:<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /></bean> transaction-config.xml
  43. 43. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasOppure, se gestito da Java EE Container:<tx:jta-transaction-manager /> transaction-config.xml
  44. 44. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minorquantitàDaniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
  45. 45. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minorquantitàDaniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
  46. 46. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas<context:component-scan base-package="com.extremasistemas.examples.fitnessclub" /><tx:annotation-driven /> application-config.xml
  47. 47. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas“Missione compiuta! Transazioni implementate!!”
  48. 48. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasRiunione con il Cliente…Requisiti:• Ho due nuovi impiegati, vorrei che anch’essi utilizzassero l’applicazione.• Deve rimanere un’ applicazione desktop• Vorrei che la business logic fosse spostata su un server• Ma, non voglio un server web!
  49. 49. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas Remote Method Invocation“Senza toccare una riga di codice Java”
  50. 50. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasCome ?1. Spostando il back-end dell’applicazione su una macchina dedicata2. Lasciando il solo front-end sui terminali degli operatori3. Modificando le istruzioni di configurazione di Spring per il back-end ed il front-end.
  51. 51. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas<context:component-scan base-package="com.extremasistemas.examples.fitnessclub" /><tx:annotation-driven /><bean class="org.springframework.remoting.rmi.RmiServiceExporter"> <property name="serviceName" value="FitnessClubService" /> <property name="serviceInterface" value="com.extremasistemas.examples.fitnessclub.service.FitnessClubService" /> <property name="service" ref="fitnessClubService" /></bean> application-config.xml (server)
  52. 52. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas<bean id=“fitnessClubService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean"> <property name="serviceUrl" value="rmi://HOST:1099/FitnessClubService" /> <property name="serviceInterface" value=" com.extremasistemas.examples.fitnessclub.service.FitnessClubService " /></bean> application-config.xml (client)
  53. 53. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas Fatto!“E non abbiamo toccato una sola riga di codice Java!!”
  54. 54. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasRiunione con il Cliente…Requisiti:• Ho vinto al Superenalotto! Apro 10 club sul territorio!!• Ora voglio che la mia applicazione sia utilizzata via web!• Voglio comunque mantenere la stessa logica di business
  55. 55. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasE come ? Con Spring MVC!
  56. 56. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasE come ?1. Mantenendo intatta la configurazione applicativa2. Configurando l’applicazione web via web.xml3. Configurando Spring MVC4. Definendo in nostri Controller5. Creando i nostri Form
  57. 57. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas<web-app> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:/META-INF/spring/application-config.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</servlet-name> </listener> … web.xml
  58. 58. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas… <servlet> <servlet-name>fitnessClubApplication</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:/META-INF/spring/web/mvc-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> …</web-app> web.xml
  59. 59. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas<mvc:annotation-driven /><mvc:default-servlet-handler /><mvc:view-controller path="/login" view-name="login" /><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /></bean><context:component-scan base-package="com.extremasistemas.examples.fitnessclubweb" /> mvc-config.xml
  60. 60. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minorquantitàDaniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas FitnessClubsController.java
  61. 61. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas<a href="http://www.server.com/fitnessclubs/members" >Lista Iscritti</a>…la lista degli iscritti sarà quindi recuperabile come attributo della request: ${members}
  62. 62. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minorquantitàDaniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas FitnessClubsController.java
  63. 63. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas<forms:form action="${myurl} " method="POST" modelAttribute="customer"> … <forms:input path="firstName" /> <forms:errors path="firstName" /> …</forms:form> memberForm.jsp
  64. 64. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasE per la sicurezza, come si fa ?1. Si aggiunge un filtro sul web.xml2. Si aggiunge la configurazione per la sicurezza3. Eventualmente, si utilizza la taglib specifica di Spring per personalizzare le JSP
  65. 65. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas<filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class></filter><filter-mapping> <filter-name>springSecurityFilterChain</filter-name> <url-pattern>/*</url-pattern></filter-mapping> web.xml
  66. 66. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas<security:http pattern="/css/**" security="none"/><security:http pattern="/login.jsp*" security="none"/><security:http auto-config="true" use-expressions="true"> <security:intercept-url pattern="/**" access="hasRole( ROLE_USER)" /> <security:form-login login-page="/login" authentication-failure-url="/login?login_error=1" /> <scecurity:logout logout-url="/logout" logout-success-url="/" invalidate-session="true" /></security:http><security:authentication-manager> <security:authentication-provider> <security:jdbc-user-service data-source-ref="dataSource"/> </security:authentication-provider> security-config.xml</security:authentication-manager>
  67. 67. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas<security:authorize access="hasRole(ROLE_USER)" > …lo legge solo chi ha questa determinata authority!!</security:authorize>Oppure, per visualizzare i dati relativi al contesto di sicurezza:Benvenuto: <security:authentication property="principal.username" /> example.jsp
  68. 68. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minorquantitàDaniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas “E la sicurezza è servita!”
  69. 69. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas“Vorrei una mail per ogni errore sul Data Access Layer”
  70. 70. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasCome possiamo farlo?1. Modifichiamo tutte le repository (molto male!!!) – Violazione del DRY Principle (Code Scattering) – Violazione del SoC Principle (Code Tangling)2. Aggiungiamo un componente per svolgere l’attività (Ok!) – No Tangling – No Scattering
  71. 71. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasSpring Aspect Oriented Programming (…al volo!)
  72. 72. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minorquantitàDaniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas DataAccessLayerMonitor.java
  73. 73. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas<aop:aspectj-autoproxy > <aop:include name="dataAccessMonitor" /></ aop:aspectj-autoproxy ><bean id="dataAccessMonitor“ class=" com.extremasistemas.examples.fitnessclub.aspects.DataAccessLayerMonitor "> <constructor-arg ref="mailService" /></bean> aspects-config.xml
  74. 74. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minor quantità Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas<import resource="aspects-config.xml" /><context:component-scan base-package="com.extremasistemas.examples.fitnessclub" /><tx:annotation-driven /> application-config.xml
  75. 75. Fatto! Già fatto?? Codice più efficiente e, soprattutto, in minorquantitàDaniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas “Fatto!!”
  76. 76. Capitolo 3 Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas Facciamo tutti parte di un disegno piùgrande. Il team, Spring ed i concetti legati ai Design Patterns
  77. 77. Facciamo tutti parte di un disegno più grande. Il team, Spring ed concetti legati ai Design Patterns Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasLa piattaforma Java propone una vasta gamma difunzionalità per lo sviluppo delle nostre applicazioni.Non ci fornisce, però, i mezzi per poterne organizzare glielementi fondamentali in un insieme che sia coerente con iprincipi legati ai Design Patterns.Sicuramente, possiamo usare i Design Patterns per lacomposizione delle varie classi ed istanze di oggetti…
  78. 78. Facciamo tutti parte di un disegno più grande. Il team, Spring ed concetti legati ai Design Patterns Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas…Ma, dobbiamo implementarli nella nostra applicazione!
  79. 79. Facciamo tutti parte di un disegno più grande.Il team, Spring ed concetti legati ai Design PatternsDaniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
  80. 80. Facciamo tutti parte di un disegno più grande. Il team, Spring ed concetti legati ai Design Patterns Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasSpring ApplicationContext = Inversion of Control Pattern
  81. 81. Facciamo tutti parte di un disegno più grande. Il team, Spring ed concetti legati ai Design Patterns Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasSpring MVC = Front Controller Pattern
  82. 82. Facciamo tutti parte di un disegno più grande.Il team, Spring ed concetti legati ai Design PatternsDaniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas Spring AOP = Proxy Pattern
  83. 83. Facciamo tutti parte di un disegno più grande. Il team, Spring ed concetti legati ai Design Patterns Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasSpring JdbcTemplate = Template Method Pattern
  84. 84. Facciamo tutti parte di un disegno più grande. Il team, Spring ed concetti legati ai Design Patterns Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasSpring Integration = EAI Patterns
  85. 85. Facciamo tutti parte di un disegno più grande. Il team, Spring ed concetti legati ai Design Patterns Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas“La forza scorre potente in Spring!!” Ma…
  86. 86. Capitolo 4 Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas “La potenza è nulla senza controllo!”Perché i test di unità devono essere un MUST
  87. 87. La potenza è nulla senza controllo! Perché i test di unità devono essere un MUST Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasLo Unit Testing è fondamentale perché:• Prima troviamo un Bug, meno tempo impieghiamo nel risolverlo• Tenere in considerazione i test, come parte integrante del progetto (TDD), consente: • Maggiore agilità • L’utilizzo di meccanismi di verifica automatica (es. JUnit)
  88. 88. La potenza è nulla senza controllo! Perché i test di unità devono essere un MUST Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasInoltre, cosa non da poco:• L’implementazione dei test ci da la possibilità di controllare la “flessibilità” e la “modularità” del nostro sistemaSe non siamo in grado di implementare facilmente gli Stubs, oppurei Mocks, per la simulazione delle dipendenze di un componente, vuoldire che il design della nostra applicazione è da “rivedere”!
  89. 89. La potenza è nulla senza controllo! Perché i test di unità devono essere un MUST Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasSpring ci offre inoltre pieno supportoagli Integration Test:• Permettendoci l’utilizzo dei bean nei test (tramite DI)• Permettendoci l’uso delle transazioni per i test• Fornendoci componenti di supporto all’esecuzione di test “out-of-container” (es. per le web application)
  90. 90. La potenza è nulla senza controllo!Perché i test di unità devono essere un MUSTDaniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas CustomerServiceTest.java
  91. 91. La potenza è nulla senza controllo!Perché i test di unità devono essere un MUSTDaniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas
  92. 92. Capitolo 5 Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas “L’importante è vincere, non partecipare!”Il valore aggiunto dato da Spring Framework
  93. 93. L’ importante è vincere, non partecipare! Il valore aggiunto dato da Spring Framework Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemasff
  94. 94. L’ importante è vincere, non partecipare! Il valore aggiunto dato da Spring Framework Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasSpring Features Overview:• Modern Web• Data Access• Integration• Mobile• Social• Security• Cloud Ready
  95. 95. L’ importante è vincere, non partecipare! Il valore aggiunto dato da Spring Framework Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasSpring Projects Overview:Spring AMQP Spring MobileSpring for Android Spring.NETSpring Batch Spring RooSpring Data Spring SecuritySpring Framework Spring SocialSpring Gemfire Spring Web FlowSpring Integration Spring Web Services
  96. 96. L’ importante è vincere, non partecipare! Il valore aggiunto dato da Spring Framework Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasSpringSource ToolSuiteFeatures: • Wizards per Spring Projects, configurazione bean con xml files • Supporto per Spring 3.1 • Funzionalità avanzate per il completamento del codice, “content-assist”, validazione e supporto al “quick-fix” di applicazioni Spring • Supporto al refactoring per la configurazione XML e @Configuration • Editor grafico per la configurazione di Spring • Tools visuali di sviluppo per Spring Web Flow, Spring Batch e Spring Integration • Spring Roo project wizard con shell integrata
  97. 97. L’ importante è vincere, non partecipare! Il valore aggiunto dato da Spring Framework Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasSpringSource ToolSuiteDeployment Target flessibile: • Supporto per tutti i più comuni Java EE Application Servers • Supporto avanzato per VMware vFabric tc Server • Piena integrazione dell’IDE per Cloud Foundry, con inclusione del debug diretto nel cloud
  98. 98. L’ importante è vincere, non partecipare! Il valore aggiunto dato da Spring Framework Daniele La Nave dlanave@extrema-sistemas.com - Extrema SistemasSpringSource ToolSuitePronto per l’uso: • Distribuzione basata su Eclipse • Componenti comuni già pre-installati • Contiene le ultime versioni per i runtime di tc Server Developer Edition e Spring Roo
  99. 99. L’ importante è vincere, non partecipare! Il valore aggiunto dato da Spring Framework Daniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemastc Server Developer & Spring Insight
  100. 100. Q&ADaniele La Nave dlanave@extrema-sistemas.com - Extrema Sistemas Q&A

×