Sto leggendo di nuovo parti specifiche del libro di refactoring di Martin Fowlers (le aree su cui non sono stato informato della prima volta). Sto guardando al capitolo del metodo Extract al momento. Posso capire perché il metodo Extract è benefico; ad esempio:
1) Ereditarietà e sovrascrittura
2) Chiarezza per l'utente della classe
Dire che ho un codice come il seguente (Questo è un servizio di dominio DDD). È un candidato per il metodo Extract?:
public IEnumerable<KeyValuePair<int, int>> CalculateDenominationsFor(int cost)
{
var target = cost;
foreach (var denomination in currency.AvailableDenominations.OrderByDescending(a => a))
{
var numberRequired = target / denomination;
if (numberRequired > 0)
{
yield return new KeyValuePair<int, int>(denomination, numberRequired);
}
target = target - (numberRequired * denomination);
}
}
Suppongo di poter estrarre le seguenti linee di codice ai metodi:
target = target - (numberRequired * denomination);
e
yield return new KeyValuePair<int, int>(denomination, numberRequired);
Le preoccupazioni che ho riguardo alle mie due idee sopra sono:
1) Sarebbero metodi privati quindi nessun vantaggio per il chiamante.
2) La classe è attualmente sigillata, quindi nessun beneficio di successione.
Esistono indicazioni disponibili che indicano quando utilizzare il metodo Extract? Sto pensando troppo a questo? Sto cercando di applicare questo principio di minimo stupore e mi ritrovo a ripensarci molto recentemente.