Scelta la duplicazione da rimuovere e i refactoring da usare capita anche che ci sono più alternative per rimuoverla e quindi bisogna   scegliere il modo di rimuovere la duplicazione  .  
Per fare un esempio, il metodo   void C { a(); a(); X(); a(); X(); X(); }  può essere  trasformato in
        void C { aa(); X(); a(); XX(); } 
oppure in   
    void C { a(); aX(); aX(); X(); } 
In questo caso nel cercare un nome per il metodo ottenuto in un modo (nel esempio un nome per aa() e XX()) e quello ottenuto nell'altro (nel esempio u nnome per aX())  scegliere quello col nome che ha più senso aiuta a fare la scelta giusta. 
Un altro criterio è quello di pensare ad alcuni scenari possibili di evoluzione del programma e valutare con quale codice le cose andrebbero meglio.  Cioè con quale codice per aggiungere una nuova funzionalità è necessario cambiare meno cose, significa scegliere quella strada che meglio rispetta il principio Open/Closed o PrincipioOCP .
Riferimenti: Working Effectively with legacy code di M.C.Feathers
 
Tags :  Team Work | Agile | Pratiche | Progettazione Software |