Individuare le responsabilità di una classe

Quando capita di trovarsi con una classe troppo grossa (con 20-60 di metodi) probabilmente li ci sono troppe responsabilità, conviene individuarle e poi estrarle mettendole in nuove classi

Ecco alcuni modi di individuare le responsabilità a partire dal codice esistente di una classe:

  1. Scrivi i nomi di tutti i metodi della classe insieme alla visibilità (public, privare, friend, internal, ...) e prova a raggrtupparli in base alle similitudini nel nome

  2. Guarda i metodi privati, internal e protected. Quando sono molti probabilmente li c'è una classe nella classe.  Una classe con livello di astrazione inferiore che aspetta di essere estratta

  3. Cerca le cose che sono scolpite nel codice che invece potrebbero cambiare. Estraile in classi che contengono questi dettagli di più basso livello e usale attraverso interfacce più astratte per rompere la dipendenza

  4. Scrivi le variabili globali di classe e traccia il grafo dei metodi che usano ogni variabile, quando emerge un grappolo di metodi che insistono sulle stesse variabili quella è una potenziale classe da estrarre

  5. Prova a descrivere a parole la responsabilità principale della classe, le altre responsabilità che ci sono oltre a questa sono candidate per essere estratte in altre classi (vedi il Single Responsibility Principle o SRP e l' Interface Segregation Principle ISP)

  6. Se ancora con basta fai del refactoring esplorativo (modifiche da fare velocemente e rollbackare subito dopo)  modificando il codice (spostando ed estraendo metodi e variabili) che aiuta a capire dipendenze e relazioni tra variabili e metodi

  7. Concentrati sulla funzionalità che stai implementando, se i metodi che stai implemnetando mettono a disposizione un modo alternativo di fare qualcosa che era possibile già prima allora potresti aver identificato una responsabilità che puoi estrarre e poi sostituire.

Sempre da  Working Effectively with legacy code di M.C.Feathers , li queste euristiche sono dettagliate con esempi anche in C#. figure e spiegazioni.

 

Tags :   |  |  |  |

Print | posted @ Thursday, August 7, 2008 12:29 AM

Comments on this entry:

Gravatar # re: Individuare le responsabilità di una classe
by raffaeu at 8/7/2008 2:08 PM

Sembra una scambista ...
:-P
Comments have been closed on this topic.