Considera questo bit di codice:
private Norf foo(Baz baz) {
// ...
// Logic on baz
// ...
if (baz.color == Baz.BLUE) {
// Do this thing
}
// ...
// More logic
// ...
return norf;
}
Supponiamo che il contenuto dell'istruzione if sia al livello di astrazione sbagliato per foo
e quindi maturo per il refactoring. Spesso vado in situazioni come questa, ma non mi sento mai come se il mio refactoring fosse buono.
Un modo per fare il refact sarebbe estrarre una funzione doThisThingIfBazIsBlue
. Però una funzione con un "se" nel suo nome mi fa male, quindi non va bene.
Un altro approccio è mantenere il condizionale in foo
ed estrarre doThisThing
. Questa soluzione si sente meglio, ma a volte non è propriamente l'attività di foo
se il " thing
" è fatto o meno. In questo caso, foo
è troppo breve perché ciò contenga, ma in funzioni più lunghe può diventare la maggior parte della complessità.
Conosci uno schema di denominazione che funziona per questo tipo di situazione?
Come si refactoring complessi if
dichiarazioni e corpi?