Spesso mi vengono presentate queste due opzioni. Dal punto di vista del design, quale di questi è soggettivamente migliore, e perché?
Opzione A
class foo {
private boolean bar() {
//Stuff
}
private void A() {
if(bar())
B();
}
private void B() {
// more stuff
}
}
Opzione B
class foo {
private boolean bar() {
//Stuff
}
private void A() {
B();
}
private void B() {
if(!bar())
return;
// more stuff
}
}
Supponiamo che la duplicazione del codice non sia un problema qui, e la divisione è solo per separare, logicamente, il codice per una migliore leggibilità / comprensione (A, B e la barra hanno nomi significativi nel contesto). È più leggibile che il lettore sappia che B potrebbe non fare nulla guardando solo A? O l'incapsulamento dello stato è meglio inserito in B? Ovviamente, questo può essere rifattorizzato per separare completamente B e bar () in una classe separata, che separa ulteriormente le preoccupazioni, ma assumendo lo stato prevalentemente condiviso, che è meglio?