L'antipattern Spaghetti Code ("codice a spaghetti") è un problema legato ad un cattivo "stile" di programmazione, in assoluto il più frequente nel caso in cui abbiamo una produzione di codice che, dopo notevoli modifiche, risulta essere di difficile comprensione.
Un'espressione tipica di chi sta per introdurre questo antipattern è: «Lo stile è una perdita di tempo, meglio concentrarci sulla produzione di codice».
Contesto
Ogni progetto concluso necessiterà presto o tardi di modifiche, aggiornamenti o integrazioni, queste
operazioni dovrebbero essere effettuate in modo professionale, cioè, seguendo delle linee guida ben
precise, non improvvisate o lasciate al caso. Sono operazioni molto comuni e frequenti, proprio per
questo possono avere un fortissimo impatto sulla qualità del codice.
In molti casi tali interventi vengono fatti in maniera confusionaria e veloce, il risultato è più simile ad un "piatto di spaghetti" che ad una struttura chiara ed ordinata. In altre parole otteniamo codice disordinato, confuso, illeggibile, impossibile da documentare e riutilizzare.
Purtroppo la mancanza di "stile" è il peggior nemico per un codice di qualità. Ogni operazione sul codice dovrebbe prevedere un'adeguata fase di pianificazione, cercando di rispettare quelle che sono le basi della programmazione OO, ed attenersi, sempre, ad un chiaro e corretto "stile".
Cause
Le cause alla base di questo antipattern sono:
- Assenza di una corretta pianificazione prima dell'implementazione
- Mancanza di adeguate conoscenze dell'Object-Oriented
- Assenza di un efficace revisione del codice
- Mancanza o scarsa comunicazione tra gli sviluppatori
- Improvvisare "interventi" pensando di risparmiare tempo
Sintomi
Gli elementi che permettono d'individuare questo antipattern sono:
- Metodi orientati ai processi
- Presenza di metodi lunghi e senza parametri
- Uso di variabili globali
- Uso del GO TO
- Le iterazioni tra gli oggetti sono minime
- Nessun ricorso al polimorfismo ed ereditarietà
Conseguenze
Le conseguenze di tale antipattern sono:
- Sviluppo di un sistema difficile da mantenere ed estendere
- Difficile e in alcuni casi impossibile il riuso del codice
- Classi difficili da comprendere e testare
- Difficile produrre un'adeguata documentazione
- Difficile apportare ulteriori modifiche e integrazioni
- In casi estremi si arriva a dover implementare nuovamente la classe
Soluzione
Per evitare d'incorrere in questo antipattern si possono adottare degli accorgimenti:
- Analizzare accuratamente la documentazione disponibile
- Raggruppare il codice prodotto in partizioni di facile comprensione
- Eliminare tutte quelle porzioni di codice inaccessibili
- Convertire frammenti di codice in più opportuni metodi
- Ogni porzione di codice deve possedere un'adeguata e rigorosa progettazione Object-Oriented