martedì 28 settembre 2010

Il peso dell'esperienza...

Anni fa ho realizzato un progetto Java piuttosto complesso, e successivamente sono arrivato a fare un refactoring dello stesso progetto per sistemare le cose che nel frattempo avevo compreso meglio, o che semplicemente potevano essere fatte con pattern differenti. Ebbene, il peso dell'esperienza si fa sentire: il diagramma delle dipendenze dei package mostra un chiaro miglioramento (linearizzazione) fra le due soluzioni. Se la prima ("inesperta") mostrava un groviglio di interdipendenze, la seconda ("esperta") mostra una chiara separazione fra i vari componenti.

Risultato analogo per le dipendenze delle singole classi, dove si evidenzia un numero minore di "allacciamenti" e quindi di legami forti fra le varie classi. Personalmente non considero molto i diagrammi di dipendenza delle classi, non perché non siano importanti, ma perché tendono a fornire risultati facilmente fuorvianti. Infatti aumentando il numero delle classi riducendo contemporaneamente la complessità di ognuna di esse (quindi tenendo la complessità del progetto costante) si vengono ovviamente a creare un numero di dipendenze maggiori. Inutile dire che queste dipendenze non sono "cattive", ma sono naturalmente forzate dal design del progetto stesso. Basti pensare alla programmazione per interfacce, ove ogni classe avrà una dipendenza con una o piu' interfacce. Ad ogni modo di seguito riporto i diagrammi con la situazione di dipendenza reciproca fra classi nettamente migliorata.


Infine una curiosità: il progetto nella sua prima versione si basava su AspectJ, proprio per ridurne la complessità. La sua seconda versione non ha ancora introdotto tecniche AOP (piu' che altro per mia pigrizia). Ciò non significa che AOP non serva, ma semplicemente che AOP permette di gestire anche un cattivo design.

Nessun commento: