1. Immagina di avere il seguente:
void Foo::doFoo()
{
if (!isConditionValid())
{
log("doFoo not possible because condition is not valid");
return;
}
if (!isTheOtherConditionValid())
{
log("doFoo not possible because the other condition is not valid");
return;
}
// do Foo actions
}
C'è un modo migliore per formattare il codice? Molto spesso, ho 1,2 o 3 condizioni e trovo davvero ripetitivo avere questa struttura.
2. Che cosa succede se ho il metodo doBar, che ha le stesse identiche condizioni, quindi avremmo:
void Foo::doBar()
{
if (!isConditionValid())
{
log("doBar not possible because condition is not valid");
return;
}
if (!isTheOtherConditionValid())
{
log("doBar not possible because the other condition is not valid");
return;
}
// do Bar actions
}
Mi sento come se dovessi refactoring quelle condizioni, ma trovo difficile trovare il nome del metodo. Se chiami il metodo "areConditionsValid", non mi aspetto che registri nulla, solo per restituire un valore booleano. Quindi il seguente non mi sembra giusto:
bool Foo::areConditionsValid(String action)
{
if (!isConditionValid())
{
log(action + " not possible because condition is not valid");
return false;
}
if (!isTheOtherConditionValid())
{
log(action + " not possible because the other condition is not valid");
return false;
}
return true;
}
Perché fa più di quello che dice.
Non posso chiamarlo checkConditionsAndLog()
perché non è una buona pratica avere un "E" nel nome del metodo, è un buon modo per vedere che sta facendo più di quello che dovrebbe fare ...
Qual è il modo migliore per refactoring questo?
Lo stesso vale se c'è una sola condizione da controllare.
PS: è in C ++