Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
70k linee di codice, tangle  architetturali e le sfide del refactoring Paolo Predonzani (paolo.predonzani@manydesigns.com)
“ Refactoring is a disciplined technique for restructuring an existing body of code, altering its internal structure witho...
Motivazioni per refactoring 'quotidiano' <ul><li>Ripensamenti </li></ul><ul><ul><li>rename </li></ul></ul><ul><li>Ridurre ...
Cosa faremmo senza 'find usages'?
'Find usages' a livello di package Package A Package B Package A Package B Questa è una 'layered architecture'
Motivazioni per refactoring architetturale <ul><li>Tenere a mente meno cose (modularizzare) </li></ul><ul><li>Scrivere men...
DSM (Dependency Structure Matrix) con IntelliJ IDEA
I package sono ordinati in base alle dipendenze principali I tangle sono evidenziati con bordo rosso Dipendenze circolari ...
Le dipendenze problematiche sono sopra la diagonale
Esplorare una  specifica dipendenza
Dopo numerose fattorizzazioni... le dipendenze sono semplificate e organizzate
class A public void f(B b) { ... } class B public void g(A a) { ... }
class A public void f(B b) { ... } class B public void g(A a) { ... } Signature di A Signature di B
class A public void f() { B b = ... ... } class B public void g() { A a = ... ... }
class A public void f() { B b = ... ... } class B public void g() { A a = ... ... } Signature di A Signature di B Body di ...
interface A void f(); interface B void g(); class ImplA implements A public void f() { B b = ... ... } class ImplB impleme...
Package A Package B Package ImplA Package ImplB Package Builder API Implementation Builder
Package A Package B Package ImplA Package ImplB Package Builder API Implementation Builder
Upcoming SlideShare
Loading in …5
×

70k linee di codice, tangle architetturali e le sfide del refactoring

2,097 views

Published on

Presentazioe realizzata per il JUG Genova

Published in: Technology
  • Be the first to comment

70k linee di codice, tangle architetturali e le sfide del refactoring

  1. 1. 70k linee di codice, tangle architetturali e le sfide del refactoring Paolo Predonzani (paolo.predonzani@manydesigns.com)
  2. 2. “ Refactoring is a disciplined technique for restructuring an existing body of code, altering its internal structure without changing its external behavior.” (www.refactoring.org)
  3. 3. Motivazioni per refactoring 'quotidiano' <ul><li>Ripensamenti </li></ul><ul><ul><li>rename </li></ul></ul><ul><li>Ridurre le duplicazioni </li></ul><ul><li>Ridurre la lunghezza/complessità </li></ul><ul><ul><li>extract method </li></ul></ul><ul><li>Gestire il flusso/accesso dati </li></ul><ul><ul><li>change signature, create getter/setter </li></ul></ul><ul><li>Generalizzare </li></ul><ul><ul><li>extract interface, pull members up </li></ul></ul><ul><li>Migliorare l'object orientation </li></ul>
  4. 4. Cosa faremmo senza 'find usages'?
  5. 5. 'Find usages' a livello di package Package A Package B Package A Package B Questa è una 'layered architecture'
  6. 6. Motivazioni per refactoring architetturale <ul><li>Tenere a mente meno cose (modularizzare) </li></ul><ul><li>Scrivere meno test! </li></ul><ul><li>Comunicare il design ad altri </li></ul>
  7. 7. DSM (Dependency Structure Matrix) con IntelliJ IDEA
  8. 8. I package sono ordinati in base alle dipendenze principali I tangle sono evidenziati con bordo rosso Dipendenze circolari sono evidenziate in rosso Il numero indica quante dipendenze ci sono. L'indicazione “...” vuol dire “molti”
  9. 9. Le dipendenze problematiche sono sopra la diagonale
  10. 10. Esplorare una specifica dipendenza
  11. 11. Dopo numerose fattorizzazioni... le dipendenze sono semplificate e organizzate
  12. 12. class A public void f(B b) { ... } class B public void g(A a) { ... }
  13. 13. class A public void f(B b) { ... } class B public void g(A a) { ... } Signature di A Signature di B
  14. 14. class A public void f() { B b = ... ... } class B public void g() { A a = ... ... }
  15. 15. class A public void f() { B b = ... ... } class B public void g() { A a = ... ... } Signature di A Signature di B Body di A Body di B
  16. 16. interface A void f(); interface B void g(); class ImplA implements A public void f() { B b = ... ... } class ImplB implements B public void g() { A a = ... ... }
  17. 17. Package A Package B Package ImplA Package ImplB Package Builder API Implementation Builder
  18. 18. Package A Package B Package ImplA Package ImplB Package Builder API Implementation Builder

×