AntonioGanci

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

Migliorare la qualità del codice tramite un'alta coesione

Che cos'è la coesione?

La definizione che trovo più chiara l'ho letta in questo articolo High Cohesion Pattern:

La coesione è la misura di quanto le responsabilità di un particolare modulo siano correlate fra loro

Quindi una classe con una responsabilità ben specifica è una classe altamente coesiva.

Ci sono diversi tipi di coesione, quelle deboli (e quindi da evitare):

  • Per coincidenza: raggruppamento arbitrario
  • Logica: raggruppamento di operazioni simili, es. gestione della validazione dei dati di input, gestione degli errori, ecc.
  • Temporale: raggruppamento di componenti collegati temporalmente, es. tutti i metodi che vengono chiamati quando un'applicazione parte, quindi collegati solo dal momento in cui vengono eseguiti
  • Procedurale: i componenti fanno parte di un’unica sequenza di controllo e sono collegati da una procedura di esecuzione, es. VerificaDisponibilitaMagazzino, CreaOrdineFornitore, CreaBolla, ...

Quelle medie (accettabili a seconda dei casi):

  • Comunicativa: i componenti agiscono su uno stesso input o producono uno stesso output, es. Calcolo di statistiche su una serie di dati
  • Sequenziale: i dati di output di un componente sono in input ad un altro, es.: calcolo e stampa di una statistica

Infine la coesione ideale:

  • Funzionale: Ogni componente fa una cosa sola e la fa bene

A questo punto proviamo a rispondere alla domanda: Che vantaggi ho ad avere un'alta coesione?

  • Facilità di comprensione: ogni classe ha un'unica responsabilità
  • Mantenibilità: perchè meno soggetti al cambiamento
  • Riutilizzabilità: perchè le classi contengono poco codice specializzato su una responsabilità ben definita

Come faccio a determinare il livello di coesione? Questo schema può venire in aiuto:

Determinare il livello di coesione

Update: nel wiki di ugidotnet si parla anche di questo argomento nella pagina Pattern High Coesion

Print | posted on Tuesday, November 7, 2006 4:03 PM |

Feedback

Gravatar

# re: Migliorare la qualità del codice tramite un'alta coesione

x Luka: Volentieri.

x Marco: NDepend è un tool molto utile per individuare le parti di codice critiche con molte dipendenze, troppo complicate, ecc. Per ottenere un'alta coesione si deve curare il design e su questo il tool è uno strumento utile ma non si può sostituire alle competenze ed esperienza dello sviluppatore.
11/9/2006 2:06 PM | Antonio Ganci
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET