Replace Constructors with Creation Methods

 

Motivazione al refactoring:
Sviluppare una classe con più costruttori creerà qualche disagio allo sviluppatore che dovrà decidere a quale costruttore affidarsi per istanziarla; questo comportà un certo tempo di studioe dei parametri dei costruttori e/o magari del codice stesso dei costruttori.

Più costruttori abbiamo nella nostra classe più sarà complicato capirne il comportamento.

Per di più, spesso, molti dei costruttori che creeremo non verranno mai utilizzati appunto per via della complessità nel doverne studiare il comportamento.

Soluzione:
Il Creation Method può aiutare a rendere il tutto più semplice.
Il Creation Method è un metodo statico o non statico utilizzato per creare una nuova istanza.

E' bene chiamare il metodo in maniera chiara, in modo che si capisca immediatamente cosa crea (creaConnessioneFtp(), creaConnessioneHttp() ... etc).

 

Pro e Contro

(+) Comunica meglio il tipo di istanza che creerà

(+) Supera i limiti dei costruttori. Es. non possiamo avere due costruttori con lo stesso numero di parametri

(+) E’ più facile trovare codice non usato

(-) Crea un metodo non standard di creazione di un’istanza

Come fare il refactoring:

  1. Trovare un punto dove la classe viene istanziata.
    A questo punto bisogna estrarne il codice e creare un metodo publico e statico.
    Questo sarà il nostro creation method.

    (compilare e testare)

  2. Trovare tutti i costruttori che istanziano la classe usando il costruttore di prima, cancellare l'istanza ed usare il nuovo creation method.  

    (compilare e testare)

  3. Se il costruttore scelto per il refactoring è chiamato da un'altro costruttore, modificare il costruttore inserendo il creation method

    (compilare e testare)

  4. Ripetere i punti da 1 a 3
  5. Se un costruttore non viene utilizzato fuori dalla classe, renderlo non pubblico

    (compilare e testare)

Variante:
Se durante la crazione dei creation methods vi ritrovate a lavorare con molti creation method, tipo 25, potrebbe essere noioso.
In tal caso è meglio creare un factory che ritorni l'istanza appropriata.

 

 

 

posted @ martedì 27 maggio 2008 00:48

Print

Comments on this entry:

# re: Replace Constructors with Creation Methods

Left by marco at 27/05/2008 12:48
Gravatar
sinceramente non trovo tutta sti gran vantaggi nei metodi statici rispetto ai costruttori, ad esempio supera certi limiti nei costruttori ma ne aggiunge altri tuttaltro che trascurabili come il fatto che non ne è possibile farne l'override in una sottoclasse.

il fatto che è più facile trovare il codice non usato o studiarne i parametri sinceramente per me nn ha alcun fondamento, a mio parere i due modi sono equivalenti a queato scopo.

ti dò ragione sul fatto che si può dare nomi significativi ai costruttori, ad esempio GetEmptyIstance(), e che in molte occasioni è notevolmente più utile usare un costruttore statico, ma bisogna fare attenzione a non abusarne

# re: Replace Constructors with Creation Methods

Left by marco at 28/05/2008 12:52
Gravatar
ah ho finalmente capito perchè era + facile trovarli :)

cmq a sto punto conviene ancora di + usare il buon vecchio metodo commenta il costruttore, cerca di compilare e guarda gli errori dove stanno (in tal caso metodo statico/costruttore sono cmq equivalenti)
Comments have been closed on this topic.