AntonioGanci

Il blog di Antonio Ganci
posts - 201, comments - 420, trackbacks - 31

Dallo Spaghetti Code al Ravioli Code

Spaghetti e Ravioli

Lo Spaghetti Code è una definizione piuttosto conosciuta tra gli sviluppatori ed è altamente probabile trovarlo nei software scritti qualche anno fa, soprattutto quando si usavano librerie che non facilitavano la programmazione object oriented (vedi MFC ad esempio). Per fortuna con il .NET Framework le cose sono migliorate notevolmente.

Uno degli effetti più comuni dello Spaghetti Code è che, dalla seconda release in avanti, ogni richiesta di modifica del cliente viene vista malamente, in quanto gli effetti sul codice già scritto non sono facilmente prevedibili.

Oggi si può assistere al problema opposto; vedere un progetto con migliaia di piccole classi con uno o due metodi al massimo, cioè il software passa da una struttura monolitica a una struttura polverizzata. Ebbene a questo eccesso è stato dato un nome, sempre nell'ambito culinario, Ravioli Code.

L'effetto del Ravioli Code è di guardare un progetto e non avere la più pallida idea di cosa facciano queste migliaia di micro classi.

Una buona Rule Of Thumb viene data qui dove una classe dovrebbe avere mediamente 7 metodi +/- 2.

Uno dei rischi del TDD, se applicato in maniera errata, è quella di scrivere appunto del Ravioli Code, esistono tuttavia alcune tecniche di refactoring che permettono di ovviare al problema:

  • Inline class: Spostare tutte le funzionalità in un altra classe e cancellare la classe di origine.
  • Replace Subclass with Fields: Le sottoclassi variano solo in metodi che ritornano un valore costante.
  • Collapse Hierarchy: La sottoclasse è molto simile alla classe base, si possono unire in un unica classe.

Può darsi che abbia dimenticato qualche refactoring, se è così scrivetemeli nei commenti che modificherò il post.

Print | posted on mercoledì 29 agosto 2007 15:32 |

Feedback

Gravatar

# re: Dallo Spaghetti Code al Ravioli Code

Imho il rischio grossissimo della programmazione "Ravioli" è che si perda di vista qual'è la funzione che deve svolgere un singolo oggetto.... 7 metodi sono davvero pochissimi in alcuni casi mentre possono essere anche troppi in altri. Prendendo spunto anche da quello che è stato sviluppato dalla Microsoft proprio con il framework ci si accorge subito che a volte si perde molto tempo a cercare un oggetto che metta a disposizione un determinato metodo perchè ne esistono molti che fanno cose simili ma non quella che ci interessa esplicitamente. Al contrario capita anche di perdere molto tempo a sfogliare tutti i metodi e le proprietà messe a disposizione da oggetto "enormi". Entrambi i casi imho ci saranno sempre, nel senso che se un oggetto deve, nella mia mente fare 50 operazioni particolari, avrò bisogni di 50 metodi. Non m'importa di avere 10 oggetti diversi con 5 metodi a testa...
29/08/2007 16:00 | Massimo F.
Gravatar

# re: Dallo Spaghetti Code al Ravioli Code

Beh si, 50 forse era esagerato, la classe che finora ho scritto e che possiede + metodi ne avrà una ventina ed è assolutamente giusto quello che dici relativamente alla chiarezza del codice scritto (pure io di solito scrivo il codice con lo stesso principio da te riportato). Il problema che a volte si perde più tempo a capire che cosa fanno 5 classi, di cui me ne serve solo una per esempio, anzichè avere un oggetto che mi espone solo tutti i metodi. Un esempio sciocco potrebbe essere: ho 3 oggetti: uno che mi permette di creare il file pippo.txt, un altro che mi permette di scriverci una riga di testo, un terzo oggetto che mi permette di leggerlo. La cosa migliore per me sarebbe avere 1 solo oggetto che mi permette di creare, scrivere e leggere.
29/08/2007 17:35 | Massimo F.
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET