Recentemente ho trovato una buona risposta alla mia domanda nel "Codice pulito" di Uncle Bob, che voglio condividere. Distingue tre tipi di duplicazione
Pezzi di codice identico dovrebbero essere sostituiti con un singolo metodo. Quindi la soluzione sarebbe estrarre il metodo e delegare al comportamento comune.
- nello stesso metodo, eseguire Estrai la variabile locale e riutilizzarla.
- nella stessa classe eseguono il refactoring del metodo Extract.
- in classi della stessa gerarchia Extract Method e Pull it Up. È possibile creare una gerarchia per trovare un posto per i metodi.
- in classi di gerarchie separate usano la delega a nuovi oggetti.
- Se i metodi non necessitano di uno stato di inclusione, allora potrebbe essere applicato il modello "lib" (cioè un contenitore per i metodi statici, solitamente chiamato
SthUtil
o SthLib
).
casi di switch/case
e if/else
che verificano sempre lo stesso insieme di condizioni .
- Questi dovrebbero essere sostituiti con il polimorfismo.
Moduli che implementano algoritmi simili . Questi sono i più difficili da trovare, poiché nessun rilevatore di cloni può trovarli.
- Poiché lo scope è più ampio, vengono utilizzati i pattern di progettazione. È possibile applicare il modello di progettazione modello di metodo per gli algoritmi all'interno di una gerarchia di classi.
- Il modello di progettazione della strategia potrebbe essere applicato a qualsiasi algoritmo utilizzato in luoghi diversi.
Anche un punto valido menzionato da Oded, quando si tratta di diverse versioni di librerie
- consolidare su una singola versione. Il modello di progettazione delle facciate potrebbe aiutarti qui.
Alla fine la migliore frase per rispondere alla mia domanda è per stimmi:
code reuse method used in OO languages is objects.