Un refactoring che faccio comunemente è dove mi imbatto in un metodo di grandi dimensioni come
public void doSomething() {
// do First thing
doPartA1();
doPartA2();
//now something else
doSomethingElse();
doMoreSomethingElse();
doEvenMore();
// finally do this stuff
someStuff();
someMoreStuff();
}
e usa il metodo di estrazione che lo refactoring per renderlo simile a questo:
public void doSomething() {
doFirstThing();
doSomethingElse();
doStuff();
}
private void doFirstThing() {
doPartA1();
doPartA2();
}
...
So che i vantaggi di questo sono che la duplicazione tende a essere individuata più facilmente, i commenti sono sostituiti da metodi descrittivi e metodi possono essere testati con una granularità più fine. Inoltre, in una classe estesa può essere più facile isolare e raggruppare una selezione di metodi / campi come candidato per l'estrazione in una nuova classe.
Tuttavia, penso che la cosa più importante sia che se guardo a DoSomething () per la prima volta, posso solo leggere 3 righe di codice per sapere cosa fa invece di 7. Se non lo faccio completamente capisci doEvenMore (), posso scegliere di leggere il metodo e così via, elaborando la classe come una gerarchia. In effetti, comincio a leggere un breve metodo di inserimento e ho solo bisogno di leggere i metodi più bassi in qualsiasi classe quando ho bisogno di approfondire più a fondo.
Quindi, la mia domanda - c'è un nome per questo concetto nella programmazione e qual è il modo più semplice e conciso per spiegare o dimostrarlo? A volte ho trovato difficile spiegare i vantaggi ai colleghi perché è bene suddividere metodi di grandi dimensioni, anche quando questi nuovi metodi vengono chiamati da un unico punto.
EDIT: cercherò di essere più chiaro: non sto chiedendo il concetto di metodi di estrazione, sto chiedendo il principio che rende i metodi di estrazione la scelta giusta in questo caso, ad es. Se avessi il codice duplicato nel metodo originale, estraperei un metodo a causa del principio ASCIUTTO . Nel caso sopra non lo faccio, ma è comunque buono estrarre i metodi a causa del principio X. Cos'è X?