L'antipattern "Ravioli Code" (codice a ravioli) è un problema inerente all'architettura delle classi e alla loro conseguente implementazione. L'espressione simbolo di chi sta per incorrere in questo antipattern è: "Divide et Impera."
Come per lo "Spaghetti Code" anche in questo caso l'analogia di una classe con un piatto di pasta è incredibilmente calzante, infatti come un raviolo è l'elemento che racchiude un qualche tipo ripieno, così una classe racchiude metodi e dati.
Ogni programmatore, dinanzi ad un particolare problema, applica una metodologia risolutiva dettata dalla propria esperienza o frutto di determinati studi.
Tra le più comuni e apprezzate c'è la filosofia del "divide et Impera", che fornisce un approccio ai problemi efficace e lineare. Questo procedimento viene spesso applicato alla scrittura di classi, data una classe con molti compiti da svolgere, si preferisce scinderla in classi più piccole con problemi più semplici e facili d'affrontare.
Tuttavia, in alcuni casi, l'eccesso di divisione può portare alla creazione di un numero eccessivo di classi. Le conseguenze posso essere veramente dannose, il risultato è un codice frammentato, confuso, difficile da comprendere e analizzare.
Cause
S'incorre in questo antipattern quando si sviluppano un numero eccessivo di classi fortemente legate tra loro tanto da somigliare ad una di ragnatela o meglio ancora ad un piatto di ravioli. Cause Le cause alla base di questo antipattern sono:
- Errata architettura dei componenti
- Convinzione che un numero maggiore di classi lavorino meglio e in modo più efficiente
- Errata interpretazione del concetto di riuso del codice
- Convinzione che sia più semplice la fase di testing
Sintomi
Gli elementi che permettono d'individuare questo antipattern sono:
- Molte classi con nomi e metodi simili
- Frequente richiamo tra le stesse classi
- La modifica aggiornamento di una classe spesso comporta la modifica di molte altre
- Crescita esponenziale ed indiscriminata del numero di classi
Conseguenze
Le conseguenze di tale antipattern sono:
- Inutile spreco di risorse
- Impossibilità di un riuso efficace del codice
- Difficoltà di produrre la documentazione
- Difficile avere una visione d'insieme delle funzionalità della classe
Soluzione
Per evitare d'incorrere in questo antipattern si possono adottare degli accorgimenti:
- Analisi accurata dell'architettura delle classi
- Fusione di più classi che hanno compiti simili o fortemente dipendenti tra di loro
Nota
È bene porre molta attenzione verso questo antipattern, la fase di "soluzione" è molto delicata: eccedere nella fusione di più classi può portare alla formazione di blob.
Questa osservazione è importante, perché ci permette di ribadire che agire sul codice per eliminare un antipattern richiede solide conoscenze e molta pazienza, poiché si rischia di rimuovere un problema introducendone un altro.